根据CMAKE_VERBOSE_MAKEFILE静音自定义命令

问题描述 投票:0回答:2

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

这样做有一个共同的方法吗?

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

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

cmake
2个回答
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
投票

正如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()中,以便及时构建脚本调用。

© www.soinside.com 2019 - 2024. All rights reserved.