Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake:如何从环境中添加include()的搜索路径?_Cmake_Build System - Fatal编程技术网

CMake:如何从环境中添加include()的搜索路径?

CMake:如何从环境中添加include()的搜索路径?,cmake,build-system,Cmake,Build System,我试图创建一个CMake脚本集合,这些脚本应该为我们的开发团队和我们正在进行的所有项目提供一些有用的宏和函数。这些脚本应该推广到所有开发机器(Win10和Centos Linux),项目的顶级CMakeLists.txt可以包含此集合 从我从CMake文档中读到的内容来看,应该使用什么来导入这些脚本。但是,当然,CMake不知道文件系统上的位置。文档指向CMAKE\u MODULE\u PATH,但我想不出在全局范围内从“外部”设置它的方法,例如环境变量或CMAKE配置值。从项目的CMake文件

我试图创建一个CMake脚本集合,这些脚本应该为我们的开发团队和我们正在进行的所有项目提供一些有用的宏和函数。这些脚本应该推广到所有开发机器(Win10和Centos Linux),项目的顶级CMakeLists.txt可以包含此集合

从我从CMake文档中读到的内容来看,应该使用什么来导入这些脚本。但是,当然,CMake不知道文件系统上的位置。文档指向
CMAKE\u MODULE\u PATH
,但我想不出在全局范围内从“外部”设置它的方法,例如环境变量或CMAKE配置值。从项目的CMake文件中设置它会降低可移植性,尤其是在Windows上,用户可能会选择脚本的安装目录

我也不想将脚本集合部署到CMake的安装目录中。虽然它可以工作,但将我自己的脚本与来自CMake发行版的脚本混合在一起感觉很肮脏

我可以使用
find_package()
,还可以提供一个包配置文件,并使用
CMAKE_PREFIX_PATH
环境变量。但根据我对docu的理解,这是为了构建依赖项,例如库

我在这里和其他地方也发现了类似的问题,但它们通常是关于导入外部项目以构建自己的项目(->
find\u package()
)。当然,还有关于编译过程的include目录。如果我没有找到正确的问题和答案,请告诉我

那么,让CMake了解我的脚本集合的最佳/正确方法是什么?最好是在项目的CMakeLists.txt中只需要调用
include()

但我想不出一种方法可以从全局范围的“外部”设置它,例如环境变量或CMake配置值

只需
cmake-dcmake\u模块路径=/some/PATH
。为我工作:

$ cd /tmp; echo "include(ulumulu)" > CMakeLists.txt ; strace -e trace=file cmake -D CMAKE_MODULE_PATH=/some/path . |& grep access | grep ulumulu
access("/some/path/ulumulu.cmake", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/share/cmake-3.19/Modules/ulumulu.cmake", R_OK) = -1 ENOENT (No such file or directory)
access("/tmp/ulumulu", R_OK)            = -1 ENOENT (No such file or directory)
如何从环境中添加include()的搜索路径

我会建立自己的逻辑。最简单的方法是
include($ENV{SEARCH\u IN\u THIS\u PATH})
,但更好的方法是使用
cmake-D PATH\u TO\u MY\u LIBRARY=some\u PATH
,然后使用
include(${PATH\u TO\u MY\u LIBRARY})

我可以改为使用find_package(),还可以提供一个包配置文件并使用CMAKE_PREFIX_PATH环境变量。但根据我对docu的理解,这是为了构建依赖项,例如库

模块模式
find_包(…模块)
用于查找模块。我会用它。我也不会把它用于图书馆

让CMake了解我的脚本集合的最佳/正确方法是什么

在linux上的
/usr/share/cmake/
路径上安装脚本,我想在windows上安装
c:/Program Files/cmake/share/cmake
(我在windows中没有经验),并使用
查找包(库模块)


如果没有,我建议您还是使用
find_-package
并将
find*.cmake
文件安装到
//cmake/

谢谢您的输入!我仍然有点犹豫不决,是将我的脚本放到CMake的module dir中,还是从环境变量的路径中包含它们。但其中之一就是我的解决方案。您还可以执行
查找包(…提示/the/path)
。我最近与Zephyr合作,看看他们是如何解决的:
find_package(Zephyr需要提示$ENV{Zephyr_BASE})
find_-package
看起来像是一种包含东西的方式——还可以进行版本检查,诸如此类
include()
用于简单文件。是的,我在文档中已经找到了这个
HINTS
参数。我认为我应该将我的简单文件集(因此
include()
)升级为一个包:)