将 CMake 与 GNU Make 结合使用:如何查看确切的命令?

问题描述 投票:0回答:8

我将 CMake 与 GNU Make 结合使用,并希望准确查看所有命令(例如编译器如何执行、所有标志等)。

GNU make 有

--debug
,但它似乎没有那么有用,还有其他选择吗? CMake 是否在生成的 Makefile 中提供附加标志以用于调试目的?

cmake gnu-make
8个回答
482
投票

运行 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

106
投票

比较方便的是在

CMakeLists.txt
文件中设置选项为:

set(CMAKE_VERBOSE_MAKEFILE ON)

17
投票

或者简单地在 shell 上导出 VERBOSE 环境变量,如下所示:


export VERBOSE=1


14
投票

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 上测试。


8
投票

如果您使用 CMake GUI,则切换到高级视图,然后该选项称为

CMAKE_VERBOSE_MAKEFILE


5
投票

我正在尝试类似的方法来确保

-ggdb
标志存在。

在干净的目录中调用 make 并 grep 您要查找的标志。寻找

debug
而不是
ggdb
我只会写。

make VERBOSE=1  | grep debug

-ggdb
标志非常模糊,只弹出编译命令。


5
投票

CMake 3.14+

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.

0
投票

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE
将生成一个文件包含所有编译命令

某些 LSP 需要此文件来了解如何开箱即用地编译源文件,但它也可以帮助调试编译问题。

输出文件名为

${CMAKE_BINARY_DIR}/compile_commands.json

© www.soinside.com 2019 - 2024. All rights reserved.