将CMake与GNU Make一起使用:如何查看确切的命令?


281

我将CMake与GNU Make结合使用,并希望准确地查看所有命令(例如,编译器的执行方式,所有标志等)。

GNU make具有--debug,但似乎还没有其他选择吗?CMake是否在生成的Makefile中提供其他标志以进行调试?


2
或者,添加一些搜索词,如何隐藏完整,冗长的已执行命令行,并仅显示简洁的安静百分比彩色输出。
ulidtko 2011年


mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
parasrish

Answers:


369

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

cmake .
make VERBOSE=1

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

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

为了减少一些可能不太有趣的输出,您可能希望使用以下选项。该选项CMAKE_RULE_MESSAGES=OFF删除[33%] Building C object ...之类的行,同时--no-print-directory告诉make不要打印出当前目录,从而过滤掉诸如make[1]: Entering directory和之类的行make[1]: Leaving directory

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

12
这些解决方案使它变得太冗长,打印了很多CMake并使内部结构变得不有趣。有什么方法只能显示编译和链接命令(即通常与调试问题相关的内容)。也许甚至只显示失败的命令。
Tronic

热门的Google推荐建议“如果只想查看g ++命令行,则应在详细的Makefile中使用grep&Co.(如果可能)”。也许有很多cmake经验的开发人员还有其他建议。
Trevor Boyd Smith

7
顺便说一句,如果您在一个支持它的平台上,它会cmake -GNinja . ; ninja -v显示出非常好的详细输出,并具有最小的绒毛。
richq

9
单行...cmake --build . -- VERBOSE=1
letmaik

显然,我必须使用较新的cmake版本,因为在运行cmake之后,我的构建目录中没有发现makefile ...
DrumM

80

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

set(CMAKE_VERBOSE_MAKEFILE ON)

3
请不要为自己的项目这样做。并非所有用户都希望看到您详细的构建输出。不要强迫所有人都在使用您的库。CMAKE_VERBOSE_MAKEFILE 默认情况下应关闭此选项,如果需要,用户可以选择出于调试目的。
Ela782 '18

3
所以?如果您有多个开发人员并希望给他们一个选择,则始终可以将其添加为缓存变量。但是可以,在项目的发行版本中,默认情况下应将其关闭。
James Hirschorn

1
当使用qt.io QtCreator时,这是一个不错的选择,因为cmake由GUI调用。谢谢!
Grant Rostig

9

或者只是像这样在外壳上导出VERBOSE环境变量: export VERBOSE=1


8

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


如何在不使用GUI的情况下在文本文件中设置此选项?
osgx

4

我正在尝试类似的方法以确保该-ggdb标志存在。

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

make VERBOSE=1 | grep debug

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.