CMake在哪里查找.cmake脚本文件?

3

我正在尝试像这样在 cmake 中执行 execute_process

execute_process(COMMAND ${CMAKE_COMMAND} -P myScript.cmake

只有当文件myScript.cmake与当前工作目录相同时,才能正常运行。

以下是三个相关的问题:

  1. cmake是否有用于查找.cmake脚本的标准位置?
  2. 是否可以定义cmake变量来告诉cmake要查找的位置?或者
  3. 是否应该始终提供脚本的完整路径(例如:-P ${PATH_VAR}/myScript.cmake)?

CMAKE_MODULE_PATH。http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_MODULE_PATH.html,但你仍需要调用include(myScript)。 - StAlphonzo
@StAlphonzo include(myScript)是类似于使用execute_process命令,但并不完全相同。 使用include命令几乎等同于将myScript.cmake的内容粘贴到调用的CMakeLists.txt文件中 - 此时您可以访问所有环境和变量。 而使用execute_process命令则会启动一个全新的CMake进程,其中没有设置调用脚本的任何变量。 - Fraser
1个回答

7

cmake 是否有一个标准位置来查找 .cmake 脚本?

对于 execute_process 来说,没有。但是,find_XXX 命令(例如 find_file)和 include 命令有。


是否有一个 cmake 变量可以定义告诉 cmake 去哪里查找?

同样地,对于 execute_process,没有。但是,对于 find_xxx 或者 include,可以设置变量 CMAKE_MODULE_PATH


我是否总是应该给一个脚本一个完整的路径(例如, -P ${PATH_VAR}/myScript.cmake)?

那是个好选择;传递一个完整路径可以消除不确定性。但是,你也可以使用相对路径。对于 execute_process 的默认工作目录是 CMAKE_BINARY_DIR,因此你可以传递相对于这个路径的脚本路径。

另外,你可以在 execute_process 调用中指定 WORKING_DIRECTORY,无论是完整路径还是相对于 CMAKE_BINARY_DIR

如果你觉得你的脚本在一个标准位置上,你可以首先使用一个调用到 find_file 来查找它。如果找到,这将产生指向脚本的完整路径,并且该变量可以在你的 execute_process 调用中使用。


CMake确实有标准位置来查找.cmake脚本: http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries#How_package_finding_works - Victor Lamoine
@VictorL - 嗯,问题特别询问了 execute_process,在这种情况下,我的原始答案是正确的。然而,我可以看出标题留下了一些歧义的余地,所以我更新了我的答案,涵盖了 includefind_xxx 命令。 - Fraser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接