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
如何设置CMAKE_模块_路径,以便在CMAKE中进行常规和源代码外构建?_Cmake - Fatal编程技术网

如何设置CMAKE_模块_路径,以便在CMAKE中进行常规和源代码外构建?

如何设置CMAKE_模块_路径,以便在CMAKE中进行常规和源代码外构建?,cmake,Cmake,在我的CMakeLists.txt中有这样一行代码 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "cmake") 这样,可以通过如下目录树找到一些自定义库: CMakeLists.txt cmake/ |-- FindSomeLibrary.cmake |-- FindAnotherLibrary.cmake cmake . mkdir release cd release cmake -DCMAKE_BUILD_TYPE=Release ../

在我的
CMakeLists.txt中有这样一行代码

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "cmake")
这样,可以通过如下目录树找到一些自定义库:

CMakeLists.txt
cmake/
|-- FindSomeLibrary.cmake
|-- FindAnotherLibrary.cmake
cmake .
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=Release ../
通常情况下,我只是这样构建:

CMakeLists.txt
cmake/
|-- FindSomeLibrary.cmake
|-- FindAnotherLibrary.cmake
cmake .
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=Release ../
这很好用。但是,我希望使用如下脚本提供调试和发布版本:

CMakeLists.txt
cmake/
|-- FindSomeLibrary.cmake
|-- FindAnotherLibrary.cmake
cmake .
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=Release ../
但是,现在它找不到cmake模块


是否有办法设置
CMAKE\u模块\u路径
,使其既适用于源代码内部版本,也适用于源代码外部版本?

如评论中所建议:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
并始终尝试设置与某个CMAKE_*目录相关的所有路径。那样你就会错过很多错误

由于
CMAKE\u MODULE\u PATH
是一个列表,因此最好使用:

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

我不知道一个很好的解决办法。您可以
set(CMAKE\u MODULE\u PATH${CMAKE\u MODULE\u PATH}“CMAKE”PARENT\u SCOPE)
将其设置在父作用域中,但这并不是很好谢谢@Justin,只是好奇它有什么“不好”的地方?有些不好的地方:如果它被两个
add\u子目录
s隐藏(例如
add\u子目录(外部)
,它确实添加了子目录(我的库)
),最外层的作用域看不到它。我在尝试时也得到了这样的结果:
无法设置“CMAKE\u模块路径”:当前作用域没有父目录。
设置(CMAKE\u模块路径${CMAKE\u模块路径}${CMAKE\u当前源目录}/CMAKE)?始终使用相对于CMAKE\U CURRENT\U SOURCE\U DIR的路径。对于任何其他想知道的人,也可以使用
CMAKE\U CURRENT\U SOURCE\U DIR
CMAKE\U CURRENT\U LIST\U DIR
参见