ChatGPT解决这个技术问题 Extra ChatGPT

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

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

GNU make 有 --debug,但它似乎没有那么有用,还有其他选择吗? CMake 是否在生成的 Makefile 中提供其他标志以用于调试目的?

或者,要添加一些搜索词,如何隐藏完整、详细的执行命令行并仅显示简洁、安静的百分比彩色输出。
mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1

Z
Zoe stands with Ukraine

运行 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 directorymake[1]: Leaving directory 这样的行.

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

这些解决方案使其过于冗长,打印了大量的 CMake 并制作了不有趣的内部结构。有没有办法只显示编译和链接命令(即通常与调试问题相关的内容)。甚至可能只显示失败的命令。
谷歌热门推荐"if you want to see solely the g++ command lines, you should use grep & Co. - if possible - in connection with verbose Makefiles"。也许具有大量 cmake 经验的开发人员有其他建议。
顺便说一句,如果您在一个支持它的平台上,cmake -GNinja . ; ninja -v 会显示一个非常好的详细输出,并且具有最少的绒毛。
单行... cmake --build . -- VERBOSE=1
在这种情况下也可以使用 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON,这样我们就可以在文件 compile_commands.json 中拥有所有命令,而无需实际构建源代码。
C
Ciro Santilli Путлер Капут 六四事

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

set(CMAKE_VERBOSE_MAKEFILE ON)

请不要为您自己的项目执行此操作。并非所有用户都希望看到详细的构建输出。不要强迫每个使用你的图书馆的人。 CMAKE_VERBOSE_MAKEFILE 在默认情况下应该是关闭的,并且用户可以选择(如果需要)用于调试目的。
所以?如果您有多个开发人员并希望给他们一个选择,您可以随时将其添加为缓存变量。但是,是的,在项目的发布版本中,您应该默认将其关闭。
当使用 qt.io QtCreator 时,这是一个很好的选择,因为 cmake 是由 GUI 调用的。谢谢!
m
makerj

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


在 Windows 上,将环境变量 VERBOSE 设置为 1 对 MSVC 和明威。如果要撤消此操作,您需要将其设置为空,而不是 0
S
SteveL

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


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

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

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

make VERBOSE=1 | grep debug

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


C
Ciro Santilli Путлер Капут 六四事

cmake --build . --verbose

在 Linux 和生成 Makefile 的情况下,这很可能只是在后台调用 make VERBOSE=1,但 cmake --build 对于您的构建系统可能更便携,例如跨操作系统工作,或者如果您决定稍后执行例如 Ninja 构建:

mkdir build
cd build
cmake ..
cmake --build . --verbose

它的文档还表明它等同于 VERBOSE=1

--verbose, -v 启用详细输出 - 如果支持 - 包括要执行的构建命令。如果设置了 VERBOSE 环境变量或 CMAKE_VERBOSE_MAKEFILE 缓存变量,则可以省略此选项。

在 Cmake 3.22.1、Ubuntu 22.04 上测试。


未知参数 --verbose
@KansaiRobot 我刚刚在 Ubuntu 22.04 Cmake 3.22.1 上进行了测试,它工作正常。你的cmake版本是什么?
S
Stéphane Clérambault

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE 将生成一个文件 with all compilation commands

某些 LSP 需要此文件才能知道如何开箱即用地编译源文件,但它也有助于调试编译问题。

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅