如何设置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
参见