Linux下使用CMake進行編譯的時候尋找Boost庫
阿新 • • 發佈:2020-10-12
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中