我使用CMake和GNU Make,想要确切地看到所有命令(例如编译器是如何执行的,所有的标志等)。

GNU make有——debug,但它似乎没有那么有用还有其他选项吗?CMake是否为调试目的在生成的Makefile中提供额外的标志?


当前回答

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

一些LSP需要这个文件来了解如何开箱即用地编译源文件,但它也有助于调试编译问题。

输出文件名为${CMAKE_BINARY_DIR}/compile_commands.json。

其他回答

在CMakeLists.txt文件中设置选项是很方便的:

set(CMAKE_VERBOSE_MAKEFILE ON)

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

一些LSP需要这个文件来了解如何开箱即用地编译源文件,但它也有助于调试编译问题。

输出文件名为${CMAKE_BINARY_DIR}/compile_commands.json。

我尝试了类似的方法来确保-ggdb标志存在。

在一个干净的目录中调用make并grep您正在寻找的标志。寻找debug,而不是ggdb,我只会写。

make VERBOSE=1 | grep调试

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

Cmake——构建。——详细

在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 3.14 +

CMake现在有——verbose来指定详细的构建输出。不管你的生成器是什么,这都是可行的。

cd project
cmake -B build/
cmake --build build --verbose

值得注意的是,Xcode可能无法使用——冗长

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.