cmake find_package 命令


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.cmakeopencv-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到系統目錄中,因此在沒有顯式指定搜索路徑時也可以順利找到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM