Makefile 摆脱“禁用jobserver模式”警告?
在我的Makefile 摆脱“禁用jobserver模式”警告?,makefile,cmake,gnu-make,Makefile,Cmake,Gnu Make,在我的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}) 因为我想在构建我的\u目标后重新运行make。它显示此警告-
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})
因为我想在构建
我的\u目标后重新运行make
。它显示此警告--警告:-jN在submake中强制:禁用jobserver模式。
一切正常,但如何删除此警告?从CMake文件中的make调用中删除-j
选项,警告将消失。通过强制此选项,您实际上是在创建一个全新的jobserver域,与现有的jobserver域分离(因此,如果您从命令行运行make-j$(nproc)
,然后运行此选项,您将运行$(nproc)*2个作业)。如果我将command make-j
nproc``更改为command make
,我收到以下警告--make[3]:警告:jobserver不可用:使用-j1。将“+”添加到父生成规则。
如何修复此规则?将警告更改为COMMAND+make
,将其删除。我接受答案,谢谢。请注意,如果您使用不同于Makefiles的生成器(例如,如果您尝试使用Ninja或其他工具),此解决方案将失败。但是,如果您对此感到满意,可以尝试改用:COMMAND\$(MAKE)
(包括反斜杠,以便cmake不会解释美元符号)。这可能足以让子make使用与父级相同的jobserver运行。不过,对于任何非makefile生成器,:也将失败。使用+make
可能会在cmake生成的makefile中产生一条规则,该规则类似于:rule:deps\n\t+make,其中“+”由make解释。因此,当您使用不同于makefile的生成器时,这也会失败,对吗?