cmake 和便携式 nul / /dev/null 设备

cmake and portable nul / /dev/null device

在我的 Cmake 脚本中,我需要将标准输出重定向到 NUL / /dev/null 设备。我在 CMake 文档中搜索了可移植的解决方案,但没有找到。

我可以做类似的事情

if (WIN32)
  set(NULDEV NUL)
else()
  set(NULDEV /dev/null)
endif()

并在代码中使用 ${NULDEV},但我更喜欢 CMake 附带的便携式解决方案。

编辑使用形式:

add_custom_target(docs
    COMMENT "Generating documentation."
    COMMAND ${CMAKE_COMMAND} -E chdir ${PROJECT_BINARY_DIR} "${THE_PROGRAM}" arguments > nul
)

这可能吗?

如果您是 运行 使用 execute_process() 的 shell 命令,并且想要完全输出。您可以使用 OUTPUT_QUIET and/or ERROR_QUIET 选项。

来自 execute_process 文档:

OUTPUT_QUIET, ERROR_QUIET
    The standard output or standard error results will be quietly ignored.

示例 1:

execute_process(COMMAND "${THE_PROGRAM}" argument OUTPUT_QUIET)

如果您使用的是 add_custom_target(),那么很遗憾,它并不是那么简单。你可以做的是:

示例 2:

  1. 创建用于执行程序的包装器 cmake 脚本:

    # generate_docs.cmake
    execute_process(COMMAND "${THE_PROGRAM}" argument OUTPUT_QUIET)
    
  2. 让CMake执行封装脚本而不是直接运行程序:

    add_custom_target(docs
        COMMENT "Generating documentation."
        COMMAND ${CMAKE_COMMAND} -P generate_docs.cmake
    )