我将 CMake 与 GNU Make 一起使用,并希望准确查看所有命令(例如编译器的执行方式、所有标志等)。
GNU make 有 --debug
,但它似乎没有那么有用,还有其他选择吗? CMake 是否在生成的 Makefile 中提供其他标志以用于调试目的?
mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
运行 make 时,添加 VERBOSE=1
以查看完整的命令输出。例如:
cmake .
make VERBOSE=1
或者,您可以将 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
添加到 cmake 命令,以获得生成的 Makefile 的永久详细命令输出。
cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make
为了减少一些可能不太有趣的输出,您可能希望使用以下选项。选项 CMAKE_RULE_MESSAGES=OFF
删除像 [ 33%] Building C object... 这样的行,而 --no-print-directory
告诉 make 不要打印当前目录,过滤掉像 make[1]: Entering directory
和 make[1]: Leaving directory
这样的行.
cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory
将 CMakeLists.txt
文件中的选项设置为:
set(CMAKE_VERBOSE_MAKEFILE ON)
CMAKE_VERBOSE_MAKEFILE
在默认情况下应该是关闭的,并且用户可以选择(如果需要)用于调试目的。
或者简单地在 shell 上导出 VERBOSE 环境变量,如下所示: export VERBOSE=1
VERBOSE
设置为 1
对 MSVC 和明威。如果要撤消此操作,您需要将其设置为空,而不是 0
。
如果您使用 CMake GUI,则切换到高级视图,然后该选项称为 CMAKE_VERBOSE_MAKEFILE。
我正在尝试类似的方法来确保存在 -ggdb
标志。
在一个干净的目录中调用 make 并 grep 您正在寻找的标志。寻找 debug
而不是 ggdb
我只想写。
make VERBOSE=1 | grep debug
-ggdb
标志非常模糊,只弹出编译命令。
cmake --build . --verbose
在 Linux 和生成 Makefile 的情况下,这很可能只是在后台调用 make VERBOSE=1
,但 cmake --build
对于您的构建系统可能更便携,例如跨操作系统工作,或者如果您决定稍后执行例如 Ninja 构建:
mkdir build
cd build
cmake ..
cmake --build . --verbose
它的文档还表明它等同于 VERBOSE=1
:
--verbose, -v 启用详细输出 - 如果支持 - 包括要执行的构建命令。如果设置了 VERBOSE 环境变量或 CMAKE_VERBOSE_MAKEFILE 缓存变量,则可以省略此选项。
在 Cmake 3.22.1、Ubuntu 22.04 上测试。
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE
将生成一个文件 with all compilation commands。
某些 LSP 需要此文件才能知道如何开箱即用地编译源文件,但它也有助于调试编译问题。
输出文件名为 ${CMAKE_BINARY_DIR}/compile_commands.json
。
不定期副业成功案例分享
cmake -GNinja . ; ninja -v
会显示一个非常好的详细输出,并且具有最少的绒毛。cmake --build . -- VERBOSE=1
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
,这样我们就可以在文件compile_commands.json
中拥有所有命令,而无需实际构建源代码。