【问题标题】:How do you make CMake print *all* commands not just build commands?你如何让 CMake 打印 *all* 命令而不仅仅是构建命令?
【发布时间】:2020-12-11 05:05:29
【问题描述】:

因此,您可以使用 VERBOSE 选项让 CMake 在构建时将所有编译器命令行打印到控制台,但这似乎对其他非编译器命令的命令没有任何影响,例如这个execute_process 命令:

  execute_process(
    COMMAND ${_TEST_EXECUTOR} "${_TEST_EXECUTABLE}" --gtest_list_tests
    WORKING_DIRECTORY "${_TEST_WORKING_DIR}"
    TIMEOUT ${_TEST_DISCOVERY_TIMEOUT}
    OUTPUT_VARIABLE output
    RESULT_VARIABLE result
  )

它实际上是 CMake 中 google 测试模块的一部分。我遇到了一个问题,我需要跟踪正在执行的确切命令行。我只能通过手动破解文件来做到这一点。如果我能够吐出 CMake 正在执行的所有命令,它会快得多。

在 CMake 中有没有办法做到这一点?

【问题讨论】:

  • 您想要_TEST_EXECUTOR 的详细输出吗?这将因COMMAND 正在运行而有所不同,并且您必须为每个命令手动插入该特定命令的详细选项。
  • 是的,我想看看实际的命令行 execute_process 正在运行。我无法在此处添加详细选项,因为它不是我的代码,它在 Google Test CMake 模块中,我实际上必须复制该文件,编辑该文件,然后破解我的文件以使用本地副本(这是 之后我花了很长时间追踪运行我的测试的 execute_process 命令)。如果我能看到 CMake 正在运行的所有命令,那将节省大量时间。

标签: cmake


【解决方案1】:

要打印execute_process 中的命令,您可以在每个execute_process 命令中使用COMMAND_ECHO 设置 您希望它们单独打印的位置:

execute_process(
    COMMAND ${_TEST_EXECUTOR} "${_TEST_EXECUTABLE}" --gtest_list_tests
    WORKING_DIRECTORY "${_TEST_WORKING_DIR}"
    TIMEOUT ${_TEST_DISCOVERY_TIMEOUT}
    OUTPUT_VARIABLE output
    RESULT_VARIABLE result
    COMMAND_ECHO STDOUT
  )

或通过在顶级 CMake 文件中设置此变量,对整个 CMake 项目中的所有 execute_process 命令通用:

set(CMAKE_EXECUTE_PROCESS_COMMAND_ECHO STDOUT)

这些功能在 CMake 3.15 及更高版本中可用。


对于它的价值,您还可以使用 cmake command line option 获取 CMake 运行的每个命令(带有扩展的 CMake 变量)的完整打印输出:

cmake --trace-expand ..

但这可能比你想要的要冗长得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多