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

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


当前回答

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

其他回答

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.

运行make时,添加VERBOSE=1以查看完整的命令输出。例如:

cmake .
make VERBOSE=1

或者您可以在cmake命令中添加-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON,用于生成的makefile的永久详细命令输出。

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

为了减少一些可能不太有趣的输出,您可能会使用以下选项。选项CMAKE_RULE_MESSAGES=OFF删除像[33%]Building C object…,而——no-print-directory告诉make不打印当前目录,过滤出像make[1]:进入目录和make[1]:离开目录这样的行。

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory

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

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

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

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

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

set(CMAKE_VERBOSE_MAKEFILE ON)