【问题标题】:Is there a way to get errors when a CMake command fails?当 CMake 命令失败时,有没有办法得到错误?
【发布时间】:2013-03-23 17:43:37
【问题描述】:

我正在编写一个脚本并开始使用install 命令(用于复制文件)但它不起作用。 CMake 配置/生成没有显示任何错误(即它不会停止并且没有显示与此命令相关的警告/错误)并且该命令似乎不起作用,因为我没有看到任何文件被复制。

由于我是新手,我想知道:

  • 如何判断install 失败(可能是源目录错误,或者目标目录错误)?它似乎默默地失败了。
  • 是否有错误代码可供我查看以了解问题所在?
  • 什么时候调用install?当我点击配置?还是项目建成时?

我在 Windows 上。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    对于一般性问题,有很多方法可以从 CMake 中获得更详细的输出 - 我刚刚学习了第三种方法来解决棘手的错误:

    1. 为了调试 CMake 配方,我喜欢使用 message 命令,您甚至可以遍历目录并发出消息*
      • 例如message( STATUS "SQLITE3_LIB: ${SQLITE3_LIB} SQLITE3_PATH: ${SQLITE3_PATH}") # prints SQLITE3_LIB and SQLITE3_PATH variables
    2. 执行详细构建以对构建本身进行故障排除
      • 运行make VERBOSE=1(用make,ninja -v用ninja等)帮你排查过程,比如cmake -DYOUR_OPTION="insert values" ~/path/to/files/ && make VERBOSE=1
    3. 如果您发现了一个难以理解的错误,我刚刚了解到我们可以在失败的命令上运行 strace - 这可能有点让人不知所措,但是当您用尽 #1 和 #2 时会有所帮助
      • 我刚刚使用 strace /usr/bin/cmake -E copy_directory $MY_SOURCE_PATH $MY_DEST_PATH 试图了解副本失败的原因

    *我已经使用DLRdave's answer 来打印另一个问题,以打印出 INCLUDE_DIRS:

    get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
    foreach(dir ${dirs})
      message(STATUS "dir='${dir}'")
    endforeach()
    

    【讨论】:

      【解决方案2】:

      当您将install 命令添加到您的 CMakeLists.txt 时,您会创建一个名为“install”的新目标。

      为了实际安装所选文件/目标,您需要构建此安装目标。它不会自动构建为“ALL”目标的一部分。

      例如,如果您使用的是 Visual Studio,则“INSTALL”目标应出现在解决方案资源管理器的“CMakePredefinedTargets”文件夹中。只需选择此目标并构建它,就会构建解决方案并安装所选项目。

      如果构建或安装过程的任何部分失败,则通知应该很明显。

      【讨论】:

      • 这很有意义。要么我看的不够仔细,要么文档在描述这些细节方面做得很差。
      • This tutorial 可能会有所帮助?
      猜你喜欢
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 2021-09-26
      • 2022-10-25
      • 2019-09-22
      • 2017-12-26
      • 2020-12-23
      • 2013-02-02
      相关资源
      最近更新 更多