find_package
通過調用find_package
可以找到頭文件和所需要的庫文件或者是一個CMake打包配置文件,
find_package(Boost [version] [EXACT] # 可選項,最小版本或者確切所需版本 [REQUIRED] # 可選項,如果找不到所需庫,報錯 [COMPONENTS <libs>...] # 所需的庫名稱,比如說. "date_time" 代表 "libboost_date_time" )
運行完后可以得到很多變量,下面列了一些主要的
Boost_FOUND - 如果找到了所需的庫就設為true
Boost_INCLUDE_DIRS - Boost頭文件搜索路徑
Boost_LIBRARY_DIRS - Boost庫的鏈接路徑
Boost_LIBRARIES - Boost庫名,用於鏈接到目標程序
Boost_VERSION - 從boost/version.hpp文件獲取的版本號
Boost_LIB_VERSION - 某個庫的版本
可以在搜索package之前,通過設置一些變量來幫助boost庫的查找
BOOST_ROOT - 首選的Boost安裝路徑 BOOST_INCLUDEDIR - 首選的頭文件搜索路徑 e.g. <prefix>/include BOOST_LIBRARYDIR - 首選的庫文件搜索路徑 e.g. <prefix>/lib Boost_NO_SYSTEM_PATHS - 默認是OFF. 如果開啟了,則不會搜索用戶指定路徑之外的路徑
示例程序
假如目標程序foo需要鏈接Boost庫regex和system,編寫如下的CMakeLists文件,
# CMakeLists.txt
project(tutorial-0)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 14)
set(BOOST_ROOT /usr/local/install/boost_1_61_0)
find_package(Boost COMPONENTS regex system REQUIRED)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}.")
MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}.")
MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}.")
add_executable(foo foo.cpp)
target_link_libraries (foo ${Boost_LIBRARIES})
endif()
- 通過設置BOOST_ROOT來設置首選的搜索路徑
- 通過MESSAGE函數把查找的結果都打印了出來
-- Boost_INCLUDE_DIRS = /usr/local/install/boost_1_61_0/include. -- Boost_LIBRARIES = /usr/local/install/boost_1_61_0/lib/libboost_regex.so;/usr/local/install/boost_1_61_0/lib/libboost_system.so. -- Boost_LIB_VERSION = 1_61.
- 編譯過程需要用到的頭文件搜索路徑保存在變量Boost_INCLUDE_DIRS中,所需要link的庫文件路徑保存在變量Boost_LIBRARIES中
參考鏈接