1. CMake 系列 - 从零构建动态库和静态库
目录
- 1. 文件目录结构
- 2. 库文件源代码
- 3. 编译生成库文件
1. 文件目录结构
首先创建如下目录结构:
└── lib├── build # ├── CMakeLists.txt└── src # ├── add.c└── add.h
从上面的结构,可以看出博主想实现一个具备简单加法的库。
build
:存放cmake生成的makefile文件,make编译生成的中间文件。
CMakeLists.txt
:使用cmake语法编写相关指令,用于生成makefile
src
:库文件的源代码
2. 库文件源代码
add.h
#ifndef _ADD_H
#define _ADD_Hint add(const int a, const int b);#endif
add.c
#include "add.h"int add(const int a, const int b)
{return a+b;
}
3. 编译生成库文件
CMakeLists.txt
# 指定cmake最小版本
cmake_minimum_required(VERSION 2.6) project(add)message("Project Name: " ${PROJECT_NAME})#设置编译参数
set(CMAKE_C_FLAGS "-g -Wall")#设置库文件文件输出目录
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)#递归获取目录下所有的C文件
file(GLOB_RECURSE c_files ${PROJECT_SOURCE_DIR}/src/*.c)#生成动态库和静态库
add_library(add_lib_shared SHARED ${c_files})
add_library(add_lib_static STATIC ${c_files})#将动态库和静态库的名字设置为 add
set_target_properties(add_lib_shared PROPERTIES OUTPUT_NAME "add")
set_target_properties(add_lib_static PROPERTIES OUTPUT_NAME "add")#设置动态库版本
set_target_properties(add_lib_shared PROPERTIES VERSION 1.0 SOVERSION 1)
编译
$ cd build
$ cmake ..
$ make
$ cd ..
$ tree lib
效果如下
lib
├── libadd.a
├── libadd.so -> libadd.so.1
├── libadd.so.1 -> libadd.so.1.0
└── libadd.so.1.0
转载于:https://www.cnblogs.com/standardzero/p/10781227.html
1. CMake 系列 - 从零构建动态库和静态库相关推荐
- 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )
文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...
- Linux下CMake简明教程(六)动态库和静态库的编译控制
代码在git 有时只需要编译出动态库和静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake.首先按照如下重新组织文件,只留下testFunc.h和TestFunc.c ├── CM ...
- cmake同时生成动态库与静态库的方法
我的目录结构 顶层CMakeLists.txt src/CMakeLists.txt src/main/main.cpp src/main/CMakeLists.txt include/person. ...
- 【Cmake实战:番外】库、动态库和静态库(.dll,.so,.lib,.a)
[Cmake实战:番外]库.动态库和静态库(.dll,.so,.lib,.a) 一.什么是库 二.库的种类 三.命名方式 四.动态库和静态库的特点 五.如何知道一个可执行程序依赖哪些库 六.linux ...
- cmake编译动态库和静态库
CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(hello)#添加源文件 aux_source_directory(./ DIR_SRCS)#设置编译参数 se ...
- 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )
文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
- Linux 动态库和静态库
From:http://blog.csdn.net/u010977122/article/details/52958330 From:http://blog.163.com/xychenbaihu@y ...
- 结合CmakeList来更好地理解windows下的动态库和静态库
动态库和静态库的输出 window下输出的静态库为.lib文件,用于包含所有的函数,以及函数的实现,以及其他的一些东西,所以文件较大:输出的动态库包含.lib文件和.dll文件,.lib文件主要包含接 ...
- 【Linux】动态库与静态库
动态库与静态库 文件系统补完 文件的三个时间acm 动态库与静态库 动态链接与静态链接 静态库与动态库 动静态库的对比 生成静态库 打包静态库 使用静态库 生成动态库 打包动态库 使用动态库 文件系统 ...
最新文章
- VC操作XML编程实例
- Android 4.1最终版SDK和ADT Plugin全线发布
- Spring Boot 学习笔记(三)Spring boot 中的SSM
- 解决Android studio 的Glide 4.1.0第三方jar包如何导入libs目录
- python中把输出结果写到一个文件中_Python3.6笔记之将程序运行结果输出到文件的方法...
- ajax获取后生成元素,获取动态的子元素生成的内容与jQuery AJAX
- bloom-generate 打包 ros 版本 noetic 的包及报 /usr/bin/ld: 找不到 -lpthreads与undefined reference pthread_create
- jUI项目最初的名字为DWZ,这个名字是怎么来的?后来为什么又改为jUI?
- 一年级计算c语言编程,用C语言switch语句做一年级算术题。
- Go官方的使用Gin开发Web服务教程 | Gopher Daily (2021.08.19) ʕ◔ϖ◔ʔ
- ubuntu QT 编译报错cannot find -lGL 的解决方法
- 排序算法——希尔排序的图解、代码实现以及时间复杂度分析
- 1.3 QT界面美化
- 运营干货!分销系统怎么做?
- 炒股杠杆-AI量化交易
- HTML侧面导航栏效果
- 红米机器人倒地_红米出现一个小人维修android机器人
- 无胁科技-TVD每日漏洞情报-2022-11-10
- RFID射频识别卡(以下称射频卡)的分类
- yum makecache报错信息解决(浪费我大量时间)
热门文章
- Python命令行选项参数解析策略
- 数据结构:字典树的基本使用
- 内存扩展算法 linux,Linux下内存的使用率正确的算法
- typescript设置默认值_TypeScript 中神奇的 this 类型声明
- 数论基础之快速幂(详细教程)
- 阿里云 EventBridge 事件驱动架构实践
- Knative 实战:基于 Knative Serverless 技术实现天气服务-下篇
- hive 表存储大小_Hive中文件存储格式及大小比较测试
- php 下载exe 打不开,EXE文件打不开的解决方法
- linux代码环境配置,linux下配置环境变量【原创】(示例代码)