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

 

posted @ 2019-04-14 11:47  流浪侠客  阅读(21227)  评论(0编辑  收藏  举报