CMake——第三方库引入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMake——第三方库引入相关的知识,希望对你有一定的参考价值。

参考技术A 对于大型工程项目,我们往往需要引入一些第三方库来帮助我们更好的解决问题,对于第三方库,有的是编译好的,有的是源码,情况不同,处理方式不同,由于笔者这方面也是刚入门,所以在此记下笔记,以备后续需要.

1.对于有.cmake的第三方库:
list(APPEND CMAKE_PREFIX_PATH "./thirdParty/opencv/build")   #.cmake所在路径  find_package(OpenCV REQUIRED)                                                             add_executable(project main.cpp)
target_link_libraries(project $OpenCV_LIBS)                                  #将exe与第三方库链接

2.对于需要源码编译(例如src文件夹中含有一堆.h,.cpp文件等)
file(GLOB_RECURSE <变量名> "src/ .hpp" "src/ .cpp" "src/ .h" "src/ .c")  
add_library(<库名> STATIC $变量名)          

3.对于已经编译好的第三方库
add_library(<库名> INTERFACE IMPORTED)      #将已编译好的include和lib封装成你想要的库 target_include_directories(<库名> INTERFACE <include文件夹所在路径>)
target_link_directories(<库名> INTERFACE <lib文件夹所在路径>)
target_link_libraries(<库名> INTERFACE <需要的.lib文件>)

4.将很多第三方库统一放在一个文件夹 “thirdparty” 下
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_target_properties(<库名> PROPERTIES FOLDER "thirdparty")

Clion(CMake工具)中如何引入第三方库

前言

因为自己最近在学Redis,想要在C++中获取到Redis内存数据库中的数据,需要使用Redis客户端来连接Redis传输命令并接收数据,在Redis官方网站上推荐的客户端中选择了acl-redis。而Clion是一款非常优秀的C++集成开发环境,Clion选择了CMake作为构建工具,所以需要在CMake配置文件中进行配置。

如何配置

CMake的所有配置都写在一个叫CMakeLists.txt的文件当中,所有的配置都写在该文件当中。

技术图片

这是我的工程目录结构,Include文件夹为acl-redis的所有头文件,lib文件夹为acl-redis的静态库,在下面的介绍过程中会以此为例子来讲解如何引入lib文件夹下的静态库。

声明路径变量

#声明头文件路径
set(INC_DIR ./include)

#声明链接库路径
set(LINK_DIR ./lib)

这里采用的是相对路径的方式来引用头文件和库文件,这样工程位置发生改变的时候,可以不用修改配置文件,其中./表示当前路径。

引入头文件和库文件

#引入头文件
include_directories(${INC_DIR})

#引入库文件
link_directories(${LINK_DIR})

在CMake中,${}的语法含义是获取变量的值,这和shell中获取变量值的方式很相似。在项目中引入了头文件和库文件,这样在编译的时候才知道到哪里去寻找相应的头文件和库文件。

设置编译文件

#添加编译文件
add_executable(TestRedis cluster.cpp)

TestRedis为我在CMake中设置的项目名称(后面会将完整的CMake文件展示出来),cluster.cpp为我要编译的文件。

引入第三方库

#将第三方库链接在一起
target_link_libraries(TestRedis lib_acl_cpp.a lib_acl.a lib_protocol.a pthread)

此时将需要链接的第三方库链接在一起即可。

完整的CMake配置文件

#设置cmake版本
cmake_minimum_required(VERSION 3.15)

#项目名字
project(TestRedis)

#设置编译版本
set(CMAKE_CXX_STANDARD 14)

#设置头文件路径
set(INC_DIR ./include)

#设置链接库路径
set(LINK_DIR ./lib)

#引入头文件
include_directories(${INC_DIR})

#引入库文件
link_directories(${LINK_DIR})

#编译文件
add_executable(TestRedis cluster.cpp)

#将第三方库连接在一起
target_link_libraries(TestRedis lib_acl_cpp.a lib_acl.a lib_protocol.a pthread)

注意事项

  • C++中第三方库的文件命名是有对应命名规则的,静态库的名称一般是libxxx.a,动态库的一般名称是libxxx.so,在我引入第三方库的时候,如果将库名称lib_acl_cpp.a重命名为acl_app.a再引用的话,将出现找不到库文件的错误,这一点没有找到原因。
  • CMake配置文件中的一些语句可以适当调整顺序,但add_executable语句必须要在target_link_libraries语句的前面。

以上是关于CMake——第三方库引入的主要内容,如果未能解决你的问题,请参考以下文章

Clion(CMake工具)中创建父子项目,引入第三方库的方法

AS使用NDK Cmake方式依赖第三方库

CMake配置工程链接库

使用CMake引入第三方so库及头文件

CMake:将第三方库链接到项目库

用CMake设置Visual Studio工程中第三方库