cmake--添加第三方库

it2022-05-21  67

前言

大多数的工程都会添加第三方库。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")

# 验证是否发现boostif(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

 

转载于:https://www.cnblogs.com/svenzhang9527/p/10704459.html


最新回复(0)