根据CMAKE_VERBOSE_MAKEFILE静音自定义命令

时间:2013-12-06 09:50:48

标签: cmake

我的CMake脚本中有一个自定义命令,可以生成大量输出。我想利用CMAKE_VERBOSE_MAKEFILE,以便我可以决定是否要查看此输出。

有没有通用的方法呢?

我看到的一种方法是根据此CMake的标志将输出重定向到/dev/null,但是Windows和其他操作系统呢?

有便携式或推荐方式吗? C / C ++编译命令的默认规则怎么样?

2 个答案:

答案 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_commandadd_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(),以便及时为脚本调用构建。