前言
大多數的工程都會添加第三方庫。cmake中find_package()函數能夠支持查找這些庫的路徑。
但是必須先為cmake配置查找配置的cmake模塊,模塊文件名稱形如“FindXXX.cmake”,這些
模塊文件通常會放到一個指定的目錄中,然后將CMAKE_MODULE_PATH變量設置為該路徑。
Linux系統默認的路徑為“/usr/share/cmake/Modules”, 有時候在使用find_package()過程發現不
創建findxxx.cmake文件也能找到模塊,比如在Linux系統使用Qt模塊時,find_package(Qt...),其實
是在默認路徑中已經包含了該模塊文件。
一, 目錄結構
├── CMakeLists.txt
├── main.cpp
* link:CMakeLists.txt[] - Contains the CMake commands you wish to run
* link:main.cpp[] - The source file with main
二,cmake腳本
cmake_minimum_required(VERSION 3.5)
project (third_party_include)
set(BOOST_ROOT "D:/boost_1_62_0")
set(BOOST_INCLUDEDIR "D:/boost_1_62_0")
set(BOOST_LIBRARYDIR "D:/boost_1_62_0/GCC/lib")
# 找到boost特定版本,以及需要的子模塊,1.46.1為最低版本,REQUIRED強調必須找到該模塊,否則編譯失敗;
# COMPONENTS后面羅列一組子模塊(這些子模塊都屬於boost)
find_package(Boost 1.46.1 REQUIRED COMPONENTS filesystem system)
# include_directories("D:/boost_1_62_0")
# link_libraries("D:/boost_1_62_0/GCC/lib/libboost_filesystem-mgw53-mt-1_62.a" "D:/boost_1_62_0/GCC/lib/libboost_system-mgw53-mt-1_62.a")
# 驗證是否發現boost
if(Boost_FOUND)
message ("boost found")
else()
message (FATAL_ERROR "Cannot find Boost")
endif()
add_executable(third_party_include main.cpp)
# 鏈接指定的boost庫文件和頭文件。
target_include_directories( third_party_include
PRIVATE ${Boost_INCLUDE_DIRS}
)
target_link_libraries( third_party_include
PRIVATE
${Boost_SYSTEM_LIBRARY}
${Boost_FILESYSTEM_LIBRARY}
)
三,擴展分析
1.環境變量
BOOST_ROOT, BOOST_INCLUDEDIR, BOOST_LIBRARYDIR在windows下需要設置,否則cmake找不到目錄。
其他的庫也包含類似環境變量, windows下同樣需要配置該路徑。
2. 第三方庫相關路徑
如上面腳本中出現的Boost_INCLUDE_DIRS, Boost_SYSTEM_LIBRARY等變量,這些變量一般的形式為moduleName_INCLUDE_DIRS, moduleName_LIBRARIES

