【问题标题】:Why does `cmake --verbose=1` give verbose cmake output but `cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON` does not?为什么 `cmake --verbose=1` 给出详细的 cmake 输出,但 `cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON` 没有?
【发布时间】:2017-05-29 09:38:30
【问题描述】:

我的目标是查看由cmake 从命令行直接调用的g++ 调用的详细信息。对于这个问题,我不关心make 的输出。

根据official FAQthe accepted answer on a related question,我应该确保在我生成的CMakeCache.txt 中设置CMAKE_VERBOSE_MAKEFILE:BOOL=ON,例如通过传递命令行标志-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON。当我这样做时,它重新查询了一堆属性,但没有提供有关调用的额外信息。

但是,使用 --verbose=1 标志调用 cmake 向我展示了我所需要的。

这两个选项有何不同? --verbose=1 是否已弃用或不鼓励使用?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    不,这不是您接受的答案和您链接的 CMake 常见问题解答所说的内容,否则我会感到惊讶。
    准确地说,他们并没有说您应该修改CMakeCache.txt不要修改该文件,这不是一个好习惯,因为很容易出错
    相反,如果您完全按照两个消息来源所说的话,即

    cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
    make
    

    cmake .
    make VERBOSE=1
    

    您会看到编译和链接阶段的详细输出。
    或者,如果您在 CMakeLists.txt 文件中放入以下行,您应该可以达到相同的效果:

    set( CMAKE_VERBOSE_MAKEFILE on )
    

    您在其中一种情况下看不到输出的事实可能是由于以前缓存的配置。
    我建议您尽可能进行源外构建,这样在这种情况下,您只需删除构建目录即可摆脱每个 CMake 生成的文件和目录。
    然后,您可以重新创建新配置,而不会受到先前生成的配置和构建文件的干扰。
    当然,我可能是错的,你遇到了一个错误,但这似乎不太可能。


    编辑:那是因为在配置阶段你没有编译,即你没有使用 Makefile,这是命令行选项设置的。在项目构建的任何阶段(配置、编译、安装),cmake 命令本身都不是一个冗长的选项。当您执行cmake . 时,它不会显示额外的配置信息,但它应该在您运行make 时显示额外的信息。
    所以CMAKE_VERBOSE_MAKEFILE 是一个错误的选项,如果你想从 CMake 本身获得详细的输出。

    【讨论】:

    • 我应该提到我尝试将该标志添加到命令行以及将其直接放在 CMakeCache.txt 中。以后我会避免修改那个特定的文件。
    • 让我在我的问题中添加一些示例输出
    • 好的。对我来说,身体并不清楚,这就是为什么我被标题说一件事而身体提到另一种方式感到困惑......;)
    • 那么从 CMake 本身获取详细输出的正确选项是什么?
    • 正如 OP 在 OP 中包含的那样,他正在寻找详细的 cmake,这是通过 cmake --verbose=1 实现的,而不是这个答案给出的
    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多