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