1、 find_package(<Name>)命令首先會在模塊路徑中尋找 Find<name>.cmake,這是查找庫的一個典型方式。
具體查找路徑依次為CMake:
變量${CMAKE_MODULE_PATH}中的所有目錄。
如果沒有,然后再查看它自己的模塊目錄 /share/cmake-x.y/Modules/ ($CMAKE_ROOT的具體值可以通過CMake中message命令輸出)。
$CMAKE_ROOT = /usr/share/cmake-3.7
/usr/share/cmake-3.7/Modules
這稱為模塊模式。
2、 如果沒找到這樣的文件,find_package()會在~/.cmake/packages/或/usr/local/share/中的各個包目錄中查找,尋找<庫名字的大寫>Config.cmake 或者 <庫名字的小寫>-config.cmake (比如庫Opencv,它會查找/usr/local/share/OpenCV中的OpenCVConfig.cmake或opencv-config.cmake)。
這稱為配置模式。
**不管使用哪一種模式,只要找到*.cmake,*.cmake里面都會定義下面這些變量:
1。 <NAME>_FOUND 2。 <NAME>_INCLUDE_DIRS or <NAME>_INCLUDES 3。 <NAME>_LIBRARIES or <NAME>_LIBRARIES or <NAME>_LIBS 4。 <NAME>_DEFINITIONS
兩種模式看起來似乎差不多,不過cmake默認采取Module模式,如果Module模式未找到庫,才會采取Config模式。如果XXX_DIR路徑下找不到XXXConfig.cmake文件,
則會找/usr/local/lib/cmake/XXX/中的XXXConfig.cmake文件。
總之,Config模式是一個備選策略。通常,庫安裝時會拷貝一份XXXConfig.cmake到系統目錄中,因此在沒有顯式指定搜索路徑時也可以順利找到。
