3

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

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

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

我在 Windows 上。

4

2 回答 2

3

对于一般性问题,有很多方法可以从 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(with make, ninja -vwith 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对另一个问题的回答打印出 INCLUDE_DIRS:

get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
  message(STATUS "dir='${dir}'")
endforeach()
于 2017-01-24T19:39:56.407 回答
1

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

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

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

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

于 2013-03-23T21:50:40.410 回答