首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当您需要指定CMAKE_MODULE_PATH时,find_package()有什么用处?

当您需要指定CMAKE_MODULE_PATH时,find_package()有什么用处?
EN

Stack Overflow用户
提问于 2013-12-23 23:58:00
回答 1查看 214.5K关注 0票数 200

我正在尝试一个使用CMake的跨平台构建系统。现在,该软件有一些依赖项。我自己编译它们并将它们安装在我的系统上。

一些已安装的示例文件:

代码语言:javascript
运行
复制
-- 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包含如下内容:

代码语言:javascript
运行
复制
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()存在的原因之一是为了摆脱非跨平台的硬编码路径。

这通常是如何完成的?我是否应该将SomeLibcmake/目录复制到我的工程中,并设置相对的CMAKE_MODULE_PATH

EN

回答 1

Stack Overflow用户

发布于 2013-12-31 10:26:51

您不需要指定模块路径本身。CMake附带了一组内置的find_package脚本,它们的位置在默认的CMAKE_MODULE_PATH中。

对于已经被CMakeified的依赖项目,更常见的用例是使用CMake的external_project命令,然后包含来自子项目的UseProject.cmake文件。如果您只需要FindProject.cmake脚本,请将其复制出子项目并将其复制到您自己的项目的源代码中,这样就不需要增加CMAKE_MODULE_PATH来查找系统级别的子项目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20746936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档