Linux下使用CMake進行編譯的時候尋找Boost庫


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

參考鏈接

FindBoost

 


免責聲明!

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



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