【问题标题】:Using CMake with GNU Make: How can I see the exact commands?将 CMake 与 GNU Make 一起使用:如何查看确切的命令?
【发布时间】:2011-02-09 20:07:05
【问题描述】:

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

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

【问题讨论】:

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

标签: cmake gnu-make


【解决方案1】:

运行 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 并制作了无趣的内部结构。有没有办法只显示编译和链接命令(即通常与调试问题相关的内容)。甚至可能只显示失败的命令。
  • 顺便说一下,如果你在一个支持它的平台上,cmake -GNinja . ; ninja -v 会显示一个非常漂亮的详细输出,并且具有最少的绒毛。
  • 单行...cmake --build . -- VERBOSE=1
  • 在这种情况下也可以使用-DCMAKE_EXPORT_COMPILE_COMMANDS=ON,这样我们就可以在文件compile_commands.json 中拥有所有命令,而无需实际构建源代码。
【解决方案2】:

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

set(CMAKE_VERBOSE_MAKEFILE ON)

【讨论】:

  • 请不要为自己的项目这样做。并非所有用户都希望看到详细的构建输出。不要强迫每个使用你的图书馆的人。 CMAKE_VERBOSE_MAKEFILE 应该默认关闭,如果需要,用户可以选择,用于调试目的。
  • 所以?如果您有多个开发人员并希望给他们一个选择,您可以随时将其添加为缓存变量。但是,是的,在项目的发布版本中,您应该默认关闭它。
  • 在使用 qt.io QtCreator 时这是一个很好的选择,因为 cmake 是由 GUI 调用的。谢谢!
【解决方案3】:

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

【讨论】:

  • 在 Windows 上,将环境变量 VERBOSE 设置为 1 对 MSVC 和 MinGW 都有效。如果要撤消此操作,则需要将其设置为空,而不是 0
【解决方案4】:

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

【讨论】:

  • 如何在不使用 GUI 的情况下在文本文件中设置此选项?
【解决方案5】:

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

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

make VERBOSE=1 | grep debug

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

【讨论】:

    【解决方案6】:

    cmake --build . --verbose

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

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

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

    --详细,-v

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 2012-03-16
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多