CMake命令的冗长输出

7
我想知道是否有办法调试 cmake 进程,并强制该命令打印更多详细信息,以了解变量如何获取某些值。例如,我看到:
-- Boost version: 1.63.0
-- Boost version: 1.63.0
-- Found the following Boost libraries:
--   system
--   filesystem
--   timer
--   chrono

我想知道检查并发现该版本的位置。

我已经在运行cmake ..之前,在CMakeLists.txt的第一行添加了set(CMAKE_VERBOSE_MAKEFILE ON)。但是,我没有看到任何冗长的信息。

我正在寻找类似于bash编程中的set -x的东西。

2个回答

9

Cmake有命令行选项--trace--trace-expand--trace-source=some_cmake_source

这些选项会给出非常详细的输出,如果您像这样启动cmake:

$cmake --trace-expand source_dir

将输出完整的配置过程,所有cmake变量都已替换为其值。由于输出的数量非常庞大(确实如此),我通常会将其重定向到文件中,例如:

$cmake --trace-expand source_dir > trace.txt 2>&1

这将把完整的输出,包括错误信息,重定向到文件trace.txt中。

如果您不想要完整配置的输出,而只需要一个特定的文件,则应使用--trace-source=some-source,像这样:

$cmake --trace-source=FindBoost.cmake source_dir

这将输出特定文件的执行情况(在本例中,它将显示搜索boost库的过程)

此外,设置CMAKE_VERBOSE_MAKEFILE变量也没有帮助,因为它控制构建过程中的详细程度,而不是配置。

最后,这是关于CMake文档的参考:

CMake命令行选项

CMAKE_VERBOSE_MAKEFILE


3

CMake提供--debug-output--trace选项, 可以在命令行运行时使用:

cmake --debug-output ..

cmake --trace ..
debug-output选项提供了一些高级洞察力,可以了解CMake如何遍历您的CMakeLists.txt文件结构;这也可以从CMake GUI中设置(选项 > 调试输出)。trace选项逐行转储CMake的处理过程(可能需要将此输出重定向到文件)。trace选项还带有trace-expandtrace-source=<file>版本,分别用于扩展CMake变量和仅跟踪特定文件。如果使用trace查找感兴趣的CMake文件和变量(例如BOOST变量),还可以利用variable_watch()来帮助监视该变量的更改,并将消息打印到屏幕上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接