cmake--添加第三方庫


前言

大多數的工程都會添加第三方庫。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

 


免責聲明!

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



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