我的CMake脚本中有一个自定义命令,可以生成大量输出。我想利用CMAKE_VERBOSE_MAKEFILE,以便我可以决定是否要查看此输出。
有没有通用的方法呢?
我看到的一种方法是根据此CMake的标志将输出重定向到/dev/null
,但是Windows和其他操作系统呢?
有便携式或推荐方式吗? C / C ++编译命令的默认规则怎么样?
答案 0 :(得分:3)
从技术上讲,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)。
答案 1 :(得分:1)
正如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()
,以便及时为脚本调用构建。