目录
- [1 find_package](#1 find_package)
- [2 config mode](#2 config mode)
-
- [2.1 搜索的文件名](#2.1 搜索的文件名)
- [2.2 搜索路径](#2.2 搜索路径)
- [3 module mode](#3 module mode)
-
- [3.1 搜索的文件名](#3.1 搜索的文件名)
- [3.2 搜索路径](#3.2 搜索路径)
- 参考
1 find_package
这是官方文档
下面是学习总结:
首先是find_package的作用是什么?引入预编译的库。
find_package有两种模式:config mode和module mode。config mode使用于cmake系库的引入,反之就是module mode。
2 config mode
bash
find_package(SomeThing
NAMES
SameThingOtherName # Another name for the package
SomeThing # Also still look for its canonical name
)
2.1 搜索的文件名
bash
# 核心文件
<PackageName>Config.cmake or <LowercasePackageName>-config.cmake
# 版本信息
<PackageName>ConfigVersion.cmake or <LowercasePackageName>-config-version.cmake
2.2 搜索路径
- 默认搜索路径前缀,注意这里是前缀,cmake会在其后的 lib/cmake/ 下去找。linux默认在 /usr , windows 默认在 Program Files。
- 可以在 CMAKE_PREFIX_PATH 里追加自定义路径前缀,有多种方法,比如
bash
# 在CMakeLists.txt中
set(CMAKE_PREFIX_PATH /path/to/libA;/path/to/libB)
# 在cmake配置的时候
cmake .. -DCMAKE_PREFIX_PATH=/path/to/libA;/path/to/libB
# 设置环境变量
# linux
export CMAKE_PREFIX_PATH=/path/to/libA:/path/to/libB
# windows
set CMAKE_PREFIX_PATH="/path/to/libA;/path/to/libB"
- 指定某些包的搜索路径,注意不是前缀,比如
bash
# 搜索的报名为 SomePackage
set(SomePackage_DIR /opt/somepackage/lib/cmake/SomePackage)
3 module mode
如果module mode搜索失败,才会进入config mode。在module mode 搜索的文件名是:
3.1 搜索的文件名
bash
Find<PackageName>.cmake
cmake维护了常用库的这个搜索文件。如果cmake没有维护,就只能参考这个教程自己写了。
3.2 搜索路径
搜索路径可以通过CMAKE_MODULE_PATH设置。
bash
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(Foo) # Loads ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Foo.cmake
find_package(Bar) # Loads ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindBar.cmake