当CMake命令失败时,有没有办法获取错误?

时间:2013-03-23 17:43:38

标签: cmake

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

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

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

我在Windows上。

2 个答案:

答案 0 :(得分:3)

对于一般性问题,有很多方法可以从CMake获得更详细的输出 - 我刚刚学会了第三个用于粗糙的错误:

  1. 调试CMake配方,我喜欢使用message命令,你甚至可以迭代目录并发出消息*
    • e.g。 message( STATUS "SQLITE3_LIB: ${SQLITE3_LIB} SQLITE3_PATH: ${SQLITE3_PATH}") # prints SQLITE3_LIB and SQLITE3_PATH variables
  2. 执行详细构建以对构建本身进行故障排除
    • 运行make VERBOSE=1(使用make,ninja -v使用忍者等),以帮助您排查流程问题,例如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来了解副本失败的原因
  4. *我使用DLRdave's answer来解决其他问题以打印出INCLUDE_DIRS:

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

答案 1 :(得分:1)

当您向CMakeLists.txt添加install命令时,您将获得一个名为“install”的新目标。

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

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

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