【问题标题】:Get rid of `disabling jobserver mode` warning?摆脱“禁用作业服务器模式”警告?
【发布时间】:2018-07-01 10:47:56
【问题描述】:

在我的CMakeLists.txt 文件中,我使用自定义命令

add_custom_command(TARGET my_target
        POST_BUILD
        COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} 
        COMMAND make -j`nproc`
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR})

因为我想在构建 my_target 后重新运行 make。它显示了这个警告 -- warning: -jN forced in submake: disabling jobserver mode. 一切正常,但我怎样才能删除这个警告?

【问题讨论】:

    标签: makefile cmake gnu-make


    【解决方案1】:

    从 CMake 文件中的 make 调用中删除 -j 选项,警告就会消失。通过强制执行此选项,您实际上是在创建一个全新的作业服务器域,与现有的域分开(因此,如果您从命令行运行 make -j$(nproc),然后运行此选项,您将运行 $(nproc)*2 作业)。

    【讨论】:

    • 如果我将 COMMAND make -jnproc`` 更改为 COMMAND make,我会收到此警告 -- make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule. 如何解决这个问题?
    • 警告已通过将其更改为 COMMAND +make 来删除。我接受答案,谢谢。
    • 请注意,如果您使用与 Makefile 不同的生成器(例如,如果您尝试使用 Ninja 或其他东西),此解决方案将失败。但是,如果您对此感到满意,可以尝试改用:COMMAND \$(MAKE)(包括反斜杠,以便 cmake 不会解释美元符号)。这可能足以让 sub-make 使用与父级相同的作业服务器运行。不过,同样:对于任何非 makefile 生成器都会失败。
    • 使用 +make 可能会导致 cmake 生成的 Makefile 中的规则如下所示: rule: deps\n\t+make 并且“+”由 make 解释。所以当你使用不同于 Makefile 的生成器时,这也会失败,对吧?
    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    相关资源
    最近更新 更多