我正在尝试一个使用CMake的跨平台构建系统。现在,该软件有一些依赖项。我自己编译它们并将它们安装在我的系统上。
一些已安装的示例文件:
-- Installing: /usr/local/share/SomeLib/SomeDir/somefile
-- Installing: /usr/local/share/SomeLib/SomeDir/someotherfile
-- Installing: /usr/local/lib/SomeLib/somesharedlibrary
-- Installing: /usr/local/lib/SomeLib/cmake/FindSomeLib.cmake
-- Installing: /usr/local/lib/SomeLib/cmake/HelperFile.cmake
现在,CMake有一个find_package()
,它打开一个Find*.cmake
文件,搜索系统上的库,并定义一些变量,如SomeLib_FOUND
等。
我的CMakeLists.txt包含如下内容:
set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}")
find_package(SomeLib REQUIRED)
第一个命令定义了CMake在Find*.cmake
之后的搜索位置,我添加了SomeLib
的目录,在该目录中可以找到FindSomeLib.cmake
,因此find_package()
可以按预期工作。
但这有点奇怪,因为find_package()
存在的原因之一是为了摆脱非跨平台的硬编码路径。
这通常是如何完成的?我是否应该将SomeLib
的cmake/
目录复制到我的工程中,并设置相对的CMAKE_MODULE_PATH
?
发布于 2013-12-31 10:26:51
您不需要指定模块路径本身。CMake附带了一组内置的find_package脚本,它们的位置在默认的CMAKE_MODULE_PATH中。
对于已经被CMakeified的依赖项目,更常见的用例是使用CMake的external_project命令,然后包含来自子项目的UseProject.cmake文件。如果您只需要FindProject.cmake脚本,请将其复制出子项目并将其复制到您自己的项目的源代码中,这样就不需要增加CMAKE_MODULE_PATH来查找系统级别的子项目。
https://stackoverflow.com/questions/20746936
复制相似问题