我将 CMake 与 GNU Make 结合使用,并希望准确查看所有命令(例如编译器如何执行、所有标志等)。
GNU make 有
--debug
,但它似乎没有那么有用,还有其他选择吗? CMake 是否在生成的 Makefile 中提供附加标志以用于调试目的?
运行 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)
或者简单地在 shell 上导出 VERBOSE 环境变量,如下所示:
export VERBOSE=1
cmake --build . --verbose
在 Linux 上并使用 Makefile 生成,这可能只是在幕后调用
make VERBOSE=1
,但是 cmake --build
对于您的构建系统来说更可移植,例如跨操作系统工作或者如果您决定这样做Ninja 稍后构建:
mkdir build
cd build
cmake ..
cmake --build . --verbose
其文档还表明它相当于
VERBOSE=1
:
--详细,-v
启用详细输出 - 如果支持 - 包括要执行的构建命令。
如果设置了 VERBOSE 环境变量或 CMAKE_VERBOSE_MAKEFILE 缓存变量,则可以省略此选项。
在 Cmake 3.22.1、Ubuntu 22.04 上测试。
如果您使用 CMake GUI,则切换到高级视图,然后该选项称为
CMAKE_VERBOSE_MAKEFILE
。
我正在尝试类似的方法来确保
-ggdb
标志存在。
在干净的目录中调用 make 并 grep 您要查找的标志。寻找
debug
而不是 ggdb
我只会写。
make VERBOSE=1 | grep debug
-ggdb
标志非常模糊,只弹出编译命令。
CMake 现在具有
--verbose
来指定详细的构建输出。无论您的发电机如何,这都有效。
cd project
cmake -B build/
cmake --build build --verbose
值得注意的是 Xcode 可能无法与 --verbose
一起使用Some generators such as Xcode don't support this option currently.
另一个选项是使用
VERBOSE
环境变量。
New in version 3.14.
Activates verbose output from CMake and your build tools of choice when you start to actually build your project.
Note that any given value is ignored. It's just checked for existence.
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE
将生成一个文件包含所有编译命令。
某些 LSP 需要此文件来了解如何开箱即用地编译源文件,但它也可以帮助调试编译问题。
输出文件名为
${CMAKE_BINARY_DIR}/compile_commands.json
。