文档章节

cmake学习笔记之add_library、target_link_libraries和link_directories

shzwork
 shzwork
发布于 03/30 15:23
字数 692
阅读 20
收藏 0

转自:https://blog.csdn.net/bigdog_1027/article/details/79113342

 

cmake是Linux(这里默认是Ubuntu系统)下常使用的编译C++的工具,而使用cmake就需要先在CmakeLists.txt文件中对编译规则进行。这里介绍常用的三种指令add_library、target_link_libraries和link_directories,该笔记主要参考了cmake官网给的教程,如有需要请访问以下网址:

https://cmake.org/cmake/help/v3.1/

1. add_library

该指令的主要作用就是将指定的源文件生成链接文件,然后添加到工程中去。该指令常用的语法如下:

 

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [source1] [source2] [...])

其中<name>表示库文件的名字,该库文件会根据命令里列出的源文件来创建。而STATIC、SHARED和MODULE的作用是指定生成的库文件的类型。STATIC库是目标文件的归档文件,在链接其它目标的时候使用。SHARED库会被动态链接(动态链接库),在运行时会被加载。MODULE库是一种不会被链接到其它目标中的插件,但是可能会在运行时使用dlopen-系列的函数。默认状态下,库文件将会在于源文件目录树的构建目录树的位置被创建,该命令也会在这里被调用。

 

而语法中的source1 source2分别表示各个源文件。

例子:

2. link_directories

该指令的作用主要是指定要链接的库文件的路径,该指令有时候不一定需要。因为find_package和find_library指令可以得到库文件的绝对路径。不过你自己写的动态库文件放在自己新建的目录下时,可以用该指令指定该目录的路径以便工程能够找到。

例子如下:

 

link_directories(
    lib
)

3. target_link_libraries

该指令的作用为将目标文件与库文件进行链接。该指令的语法如下:

 

target_link_libraries(<target> [item1] [item2] [...]
                      [[debug|optimized|general] <item>] ...)

上述指令中的<target>是指通过add_executable()和add_library()指令生成已经创建的目标文件。而[item]表示库文件没有后缀的名字。默认情况下,库依赖项是传递的。当这个目标链接到另一个目标时,链接到这个目标的库也会出现在另一个目标的连接线上。这个传递的接口存储在interface_link_libraries的目标属性中,可以通过设置该属性直接重写传递接口。

 

 

例子如下:

 

 

 

 

 

参考博客

https://www.cnblogs.com/coderfenghc/archive/2012/06/23/2559603.html

本文转载自:https://blog.csdn.net/u011414710/article/details/80335004

shzwork
粉丝 11
博文 653
码字总数 10405
作品 0
厦门
私信 提问
CMake简介,打包so文件,编译实际项目 用valgrind测内存情况

CMake简介和使用示例 CMake是常用的跨平台编译器。图像这块在给服务端做开发时,常有两个需求: (1)代码打成.so包,供别人调用; (2)编译、测试,用valgrind测内存情况。 工程较大时,借...

shzwork
03/28
19
0
《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE 《CMake实践》笔记二:INSTALL/CMAKEINSTALLPREFIX 《CMake实践》笔记三:构建静态库与动态库 及 如何使用外部共享库和头文件 五、静态...

shzwork
03/30
26
0
cmake 学习笔记(二)

在 Cmake学习笔记一 中通过一串小例子简单学习了cmake 的使用方式。 这次应该简单看看语法和常用的命令了。 简单的语法 注释 命令语法 字符串列表 变量(字符串或字符串列表) set(Foo a b c) ...

晨曦之光
2012/05/08
362
0
cmake tutorial -- 入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq992817263/article/details/89528440 参考链接: CMake CMake and Visual Studio | Cognitive Waves Clang C...

神码编程
04/25
0
0
Cmake 实现debug和release lib依赖项处理

一、说明 最近用cmake开发东西,编译vs时候,发现debug和release版本的lib库的依赖项问题,故此小结一下。若有不对之处,还请看官多多指教。 使用的工程有自己编写的工程,也有借用第三方库的...

shzwork
04/17
43
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
132
7
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
18
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部