Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 摆脱“禁用jobserver模式”警告?_Makefile_Cmake_Gnu Make - Fatal编程技术网

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的生成器时,这也会失败,对吗?