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

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


当前回答

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

其他回答

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

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

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

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

set(CMAKE_VERBOSE_MAKEFILE ON)