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

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


当前回答

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

其他回答

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

set(CMAKE_VERBOSE_MAKEFILE ON)

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

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

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

make VERBOSE=1 | grep调试

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

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

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

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

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