Cmake-add_library()
Cmake add_library命令
- add_library
- 1. 普通库
- 1.1 命令形式
- 1.2 命令参数
- 1.3 示例代码
- 2. 对象库
- 2.1 命令形式
- 2.2 示例代码
- 3. 接口库
- 3.1 命令形式
- 4. 导入的库
- 4.1 命令形式
- 5. 别名库
- 5.1 命令形式
add_library
add_library命令用来使用指定的源文件向工程中添加一个目标库,主要有一下几种形式。
1. 普通库
1.1 命令形式
add_library(<name> [STATIC | SHARED | MODULE][EXCLUDE_FROM_ALL][<source>...])
- 添加一个从source列表列出的文件构建而来的目标名为name的库。
- name必须全局唯一
- 构建库的源文件可以直接指定,也可以后续使用target_sources()指定
- STATIC(静态库) SHARED(动态库) MODULE(模块库)用来指定库的类型。
-使用STATIC构建生成静态库(name.a),使用SHARED构建生成动态库(name.so)。
1.2 命令参数
- name:构建成的库名
- STATIC|SHARED|MOUDLE:库的类型
- EXCLUDE_FROM_ALL:加了EXCLUDE_FROM_ALL属性的target在默认编译的时候,不会被编译,如果要编译它们,需要手动编译
- source:构建库的文件
1.3 示例代码
add_library(hello_library STATICsrc/Hello.cpp
)
2. 对象库
2.1 命令形式
add_library(<name> OBJECT [<source>...])
这种形式类型固定为OBJECT,以这种方式,只编译source列表的文件,但不将生成的目标文件打包或者链接为库,而是在其他add_library()或者add_executable()生成目标的时候,可以使用形如$<TARGET_OBJECTS:objlib>的表达式将对象库作为源引入。
2.2 示例代码
使用方式:
add_library(<objlib> OBJECT [<source>...])
add_library(... $<TARGET_OBJECTS:objlib> ...)
add_executable(... $<TARGET_OBJECTS:objlib> ...)
具体示例:
add_library(test_library OBJECT a.cpp b.cpp c.cpp)
add_executable(test_app main.cpp $<TARGET_OBJECTS:my_library>)
add_library(anotherlib STATIC other.cpp $<TARGET_OBJECTS:my_library>)
test_library并没有被实际生成,使用test_library的目标文件的
生成表达式作为 参数放在add_library或者add_executable放源
代码的位置,而不能放在target_link_library的位置。
这种方式不常使用,因为静态库就是把文件打包,这种情况直接使用静态库就行,了解即可。
3. 接口库
3.1 命令形式
add_library(<name> INTERFACE [IMPORTED [GLOBAL]])
生成一个接口库,这类库不编译任何文件,也不在磁盘上产生库文件。它有一些属性被设置,并且能够被安装和导出。通常,使用以下命令在接口目标上填充属性。
- set_property() - target_link_library(INTERFACE) - target_link_options(INTERFACE) - target_include_directions(INTERFACE) - target_compile_options(INTERFACE) - target_compile_definitions(INTERFACE) - target_sources(INTERFACE)
然后像其他目标一样被用作参数给target_link_libraries()
4. 导入的库
4.1 命令形式
add_library(<name> <SHARED|STATIC|MODULE|UNKNOWN> IMPORTED[GLOBAL])
- 用来导入已经存在的库,CMake也不会添加任何编译规则给它。
- 此类库的标志就是有IMPORT属性,导入的库的作用域为创建它的目录及更下级目录。但是如果有GLOBE属性,则作用域被拓展到全工程。
- 导入的库的类型必须是
STATIC, SHARED, MODULE, UNKNOWN
中的一种
对于UNKNOW类型,不需要知道类型就可使用的
从工程外部引入一个库,使用IMPORTED_LOCATION
属性确定库文件的在磁盘上的完整路径。
5. 别名库
5.1 命令形式
add_library(<name> ALIAS <target>)
为给定library添加一个别名,后续可使用
<name>
来替代<target>
。
Cmake-add_library()相关推荐
- 【CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )
文章目录 一.Android Studio 中使用 CMake 编译单个 C++ 源文件 二.cmake_minimum_required 命令设置最小 CMake 版本 三.project 命令设置 ...
- Cmake-Cookbook学习笔记
Cmake学习笔记 Cmake-Cookbook 1.cmake中相关路径 2.cmake常用变量.函数.语法 2.1 add_custom_command.add_custom_target 2.2 ...
- cmake:add_library生成静态库和动态库
此文为:轻松入门cmake系列教程 有时我们只需要编译出动态库,静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake 实验 实验一:生成静态库 编写代码 项目结构如下: [CMak ...
- cmake学习笔记之add_library、target_link_libraries和link_directories
cmake是Linux(这里默认是Ubuntu系统)下常使用的编译C++的工具,而使用cmake就需要先在CmakeLists.txt文件中对编译规则进行.这里介绍常用的三种指令add_library ...
- cmake之 ADD_LIBRARY()
上一篇我分析了如何调用别人的第三方库,现在我继续分析如何构建一个库供他人使用.完成这个任务需要用到ADD_LIBRARY() 1:ADD_LIBRARY()语法 add_library(<nam ...
- ++项目 cmake头文件路径_CMAKE入门实战
0.导语 最近做的项目使用CLION构建,而这个采用CMakeLists.txt管理,因此为了更好的学习,故找到了一篇大牛级别的入门文章,有文章有代码,本文是花了一点时间把这篇文章学习后的重要点记录吧 ...
- cmake java_JNI系列之AS支持CMake了
写在前面 Android Studio 2.2+已支持CMake编译,与以前NDK-Build方式相比方便了不少,本文旨在引导大家在AS2.2+下一步一步建立JNI工程进行开发,并假设大家已经对JNI ...
- 在Ubuntu18.04下的Cmake使用记录
(1)首先是安装cmake.命令如下: sudo apt-get install cmake (2)创建一个源程序,1.cpp如下:(1.cpp的位置是位于hoem/ysh/code) #includ ...
- CMake结合PCL库学习(2)
紧接着上一篇文章 对于PCL 库中的各个模块之间是有相互依赖关系的 其中Common模块是最基础的模块,其中是定义各种数据结构的头文件,所以Common这个模块是不需要依赖性响的,但是IO 模块就是需 ...
最新文章
- Java基础系列——IO流
- HDU4055 - number string(DP)
- APP技巧:微信中这6个设置建议关闭,可以防止个人信息或将全暴露,赶快看一看吧!...
- 团队Alpha冲刺(三)
- swing获取文本框内容_营销管理培训课件,大客服销售策略和技巧,全内容PPT拿来就用...
- python链表值讲解_python数据结构之链表的实例讲解
- rk修改launcher_RK launcher V 0.41 官方版
- docker“少折腾”
- Virtual Earth 添加纽约3D地图
- 图像处理-形态学运算
- 正则系列之手机号码正则
- win10edge启用html5,win10系统下edge浏览器怎么启用和禁用flash
- mac nginx php-fpm,Mac OS nginx 502 解决记录(php-fpm 启动失败)
- 什么时候真正体会到了,磨刀不误砍柴工?
- 类人机器人AI系统进阶模型 - 试论计算机模拟意识
- AI产业快速落地难?破局人来了
- 在日签证更新手续 网址
- maven 打包打出带依赖的和不带依赖的jiar包
- flutter友盟分享_Flutter中使用友盟统计
- 在vue3中使用jsx语法
热门文章
- keil内存溢出表现_详细讲解C语言五大内存分区与可执行程序的三段(Text段、Date段、Bss段)【建议收藏】...
- vue 进入首页只弹一个弹框_vue.js实现只弹一次弹框
- css按钮大小固定,在CSS中创建一个固定宽度的按钮
- android ascii 比较大小写,为什么可以通过ASCII中的字母排序规则来进行字母的大小写转换?...
- python整数逆位运算_Python这些位运算的妙用,绝对让你大开眼界
- C++ 11互斥锁的应用(针对于多线程的情况)
- Fedora CoreOS to CentOS7 问题汇总1
- LaTex在Linux下编写高质量的文档
- 一周文章导读:架构图;服务器;CPU
- OpenMP变量的私有与共享