【问题标题】:Where does cmake look for .cmake scripts?cmake 在哪里寻找 .cmake 脚本?
【发布时间】:2015-03-26 22:49:58
【问题描述】:

我正在尝试像这样在cmakeexecute_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。 cmake.org/cmake/help/v3.0/variable/CMAKE_MODULE_PATH.html,尽管您仍然需要调用 include(myScript)。
  • @StAlphonzo include(myScript) 与调用execute_process 相似,如图所示,但不完全相同。使用include 几乎就像将myScript.cmake 的内容粘贴到调用CMakeLists.txt 中一样——此时您可以访问所有环境和变量。调用 execute_process 会启动一个全新的 CMake 进程,该进程没有设置任何调用脚本的变量。

标签: cmake


【解决方案1】:

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

对于execute_process,没有。 find_XXX 命令(例如find_file)和include 可以。


我可以定义一个cmake 变量来告诉cmake 去哪里看吗?

再次,对于execute_process,没有。对于find_xxxinclude,可以设置变量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 脚本:cmake.org/Wiki/…
  • @VictorL - 好吧,问题是专门询问execute_process,在这种情况下,我的原始答案是正确的。但是,我可以看到标题留下了一些模棱两可的空间,因此我更新了我的答案以涵盖 includefind_xxx 命令。
猜你喜欢
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2015-12-02
  • 2012-03-29
  • 2018-11-13
  • 2014-04-02
相关资源
最近更新 更多