我试图得到一个跨平台的构建系统工作使用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()
可以工作
如预期。< / p >
但这有点奇怪,因为find_package()
存在的原因之一是为了远离非跨平台的硬编码路径。
这通常是如何做到的?我是否应该将SomeLib
的cmake/
目录复制到我的项目中,并相对地设置CMAKE_MODULE_PATH
?