我在我的CMake脚本中有一个自定义命令,它会生成大量输出。我想利用CMAKE_VERBOSE_MAKEFILE,这样我就可以决定是否要查看此输出。
这样做有一个共同的方法吗?
我看到的一种方法是根据CMake的标志将输出重定向到/dev/null
,但是Windows和其他操作系统呢?
有便携式或推荐方式吗? C / C ++编译命令的默认规则怎么样?
从技术上讲,CMAKE_VERBOSE_MAKEFILE
的存在是为了隐藏和显示命令行,而不是命令输出。
如果我必须这样做,我会使用自定义变量。
但在主题上,您应该如何做:
if (COMMAND_VERBOSE)
execute_process(COMMAND "mycustom_command")
else (COMMAND_VERBOSE)
execute_process(COMMAND "mycustom_command" OUTPUT_QUIET)
endif (COMMAND_VERBOSE)
这是最便携的方式。
还有一个ERROR_QUIET
标志,但禁用错误消息是一个坏主意,否则用户将无法查看失败时命令失败的原因。
如果您使用的是add_custom_command
或add_custom_target
,则不存在此类标志。您必须提供手动重定向到/dev/null
(Unix)或NUL
(Windows)。
正如SirDarius指出的那样,execute_process()
可以选择使工具输出静音,而add_custom_command()
/ add_custom_target()
则没有。
但是有一种方法可以解决这个问题:通过在单独的CMake脚本包装器中对工具进行实际调用,使用execute_process()
启用或禁用OUTPUT_QUIET
,具体取决于开关:
# mycustom_command.cmake
if ( OUTPUT )
execute_process( COMMAND mycustom_command )
else()
execute_process( COMMAND mycustom_command OUTPUT_QUIET )
endif()
然后,使用add_custom_command()
和CMake脚本处理模式(-P
)从主CMakeLists.txt调用该脚本,并在您的CMakeLists.txt文件中使用为此目的使用的任何变量启用/禁用脚本开关。
add_custom_command( OUTPUT outfile
COMMAND ${CMAKE_COMMAND} -P mycustom_command.cmake -DOUTPUT=${OUTPUT_DESIRED}
)
这是完全便携的。如果您的mycustom_command
是作为目标在您的项目中构建的,只需将其作为DEPENDENCY
添加到您的add_custom_command()
中,以便及时构建脚本调用。