在GNU Make中使用CMake:如何查看确切的命令?

Nil*_*ils 255 cmake gnu-make

我使用CMake与GNU Make,并希望完全看到所有命令(例如编译器如何执行,所有标志等).

GNU make有--debug,但似乎没有任何其他选项有用吗?CMake是否在生成的Makefile中提供了额外的标志以进行调试?

ric*_*chq 351

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

cmake .
make VERBOSE=1
Run Code Online (Sandbox Code Playgroud)

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

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make
Run Code Online (Sandbox Code Playgroud)

要减少一些可能不太有趣的输出,您可能希望使用以下选项.该选项CMAKE_RULE_MESSAGES=OFF删除像[33%]构建C对象...这样的行,同时--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
Run Code Online (Sandbox Code Playgroud)

  • 这些解决方案使它过于冗长,打印了大量的CMake并使内部构件变得不那么有趣.有没有办法只显示编译和链接命令(即通常与调试问题相关的内容).甚至可能只显示失败的命令. (11认同)
  • 顺便说一句,如果你在一个支持它的平台上`cmake -GNinja.; ninja -v`显示了非常好的详细输出,最小的绒毛. (7认同)
  • 单行......`cmake --build. - VERBOSE = 1` (6认同)
  • 在这种情况下,我们还可以使用“-DCMAKE_EXPORT_COMPILE_COMMANDS=ON”,这样我们就可以在“compile_commands.json”文件中拥有所有命令,而无需实际构建源代码。 (5认同)

Jam*_*orn 69

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

set(CMAKE_VERBOSE_MAKEFILE ON)
Run Code Online (Sandbox Code Playgroud)

  • 请不要为自己的项目这样做。并非所有用户都希望看到您详细的构建输出。不要强迫所有人使用您的库。缺省情况下,应将`CMAKE_VERBOSE_MAKEFILE`禁用,如果需要,用户可以选择以进行调试。 (3认同)
  • 所以?如果您有多个开发人员并希望给他们一个选择,您可以随时将其添加为缓存变量。但是是的,在项目的发布版本中,您应该默认关闭它。 (3认同)
  • 使用 qt.io QtCreator 时这是一个很好的选择,因为 cmake 是由 GUI 调用的。谢谢你! (2认同)

Cir*_*四事件 14

cmake --build . --verbose

在 Linux 上并使用 Makefile 生成,这可能只是make VERBOSE=1在幕后调用,但cmake --build对于您的构建系统来说更可移植,例如跨操作系统工作,或者如果您决定稍后进行 Ninja 构建:

mkdir build
cd build
cmake ..
cmake --build . --verbose
Run Code Online (Sandbox Code Playgroud)

它的文档还表明它相当于VERBOSE=1

--详细,-v

启用详细输出 - 如果支持 - 包括要执行的构建命令。

如果设置了VERBOSE环境变量或 CMAKE_VERBOSE_MAKEFILE 缓存变量,则可以省略此选项。

在 Cmake 3.22.1、Ubuntu 22.04 上测试。

  • 未知参数--verbose (2认同)

Ste*_*veL 7

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


mak*_*erj 6

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


Ale*_*ith 5

我正在尝试类似的方法来确保-ggdb旗帜存在。

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

make VERBOSE=1 | grep debug

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


jpr*_*r42 5

CMake 3.14+

CMake 现在必须--verbose指定详细的构建输出。无论您的发电机如何,这都有效。

cd project
cmake -B build/
cmake --build build --verbose
Run Code Online (Sandbox Code Playgroud)

值得注意的是,Xcode 可能无法与--verbose一起使用

Some generators such as Xcode don't support this option currently.
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用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.
Run Code Online (Sandbox Code Playgroud)