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

GNU make有——debug,但它似乎没有那么有用还有其他选项吗?CMake是否为调试目的在生成的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 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

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

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

make VERBOSE=1 | grep调试

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

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

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

set(CMAKE_VERBOSE_MAKEFILE ON)