目录

  • 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 系列 - 从零构建动态库和静态库相关推荐

  1. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  2. Linux下CMake简明教程(六)动态库和静态库的编译控制

    代码在git 有时只需要编译出动态库和静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake.首先按照如下重新组织文件,只留下testFunc.h和TestFunc.c ├── CM ...

  3. cmake同时生成动态库与静态库的方法

    我的目录结构 顶层CMakeLists.txt src/CMakeLists.txt src/main/main.cpp src/main/CMakeLists.txt include/person. ...

  4. 【Cmake实战:番外】库、动态库和静态库(.dll,.so,.lib,.a)

    [Cmake实战:番外]库.动态库和静态库(.dll,.so,.lib,.a) 一.什么是库 二.库的种类 三.命名方式 四.动态库和静态库的特点 五.如何知道一个可执行程序依赖哪些库 六.linux ...

  5. cmake编译动态库和静态库

    CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(hello)#添加源文件 aux_source_directory(./ DIR_SRCS)#设置编译参数 se ...

  6. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  7. Linux 动态库和静态库

    From:http://blog.csdn.net/u010977122/article/details/52958330 From:http://blog.163.com/xychenbaihu@y ...

  8. 结合CmakeList来更好地理解windows下的动态库和静态库

    动态库和静态库的输出 window下输出的静态库为.lib文件,用于包含所有的函数,以及函数的实现,以及其他的一些东西,所以文件较大:输出的动态库包含.lib文件和.dll文件,.lib文件主要包含接 ...

  9. 【Linux】动态库与静态库

    动态库与静态库 文件系统补完 文件的三个时间acm 动态库与静态库 动态链接与静态链接 静态库与动态库 动静态库的对比 生成静态库 打包静态库 使用静态库 生成动态库 打包动态库 使用动态库 文件系统 ...

最新文章

  1. VC操作XML编程实例
  2. Android 4.1最终版SDK和ADT Plugin全线发布
  3. Spring Boot 学习笔记(三)Spring boot 中的SSM
  4. 解决Android studio 的Glide 4.1.0第三方jar包如何导入libs目录
  5. python中把输出结果写到一个文件中_Python3.6笔记之将程序运行结果输出到文件的方法...
  6. ajax获取后生成元素,获取动态的子元素生成的内容与jQuery AJAX
  7. bloom-generate 打包 ros 版本 noetic 的包及报 /usr/bin/ld: 找不到 -lpthreads与undefined reference pthread_create
  8. jUI项目最初的名字为DWZ,这个名字是怎么来的?后来为什么又改为jUI?
  9. 一年级计算c语言编程,用C语言switch语句做一年级算术题。
  10. Go官方的使用Gin开发Web服务教程 | Gopher Daily (2021.08.19) ʕ◔ϖ◔ʔ
  11. ubuntu QT 编译报错cannot find -lGL 的解决方法
  12. 排序算法——希尔排序的图解、代码实现以及时间复杂度分析
  13. 1.3 QT界面美化
  14. 运营干货!分销系统怎么做?
  15. 炒股杠杆-AI量化交易
  16. HTML侧面导航栏效果
  17. 红米机器人倒地_红米出现一个小人维修android机器人
  18. 无胁科技-TVD每日漏洞情报-2022-11-10
  19. RFID射频识别卡(以下称射频卡)的分类
  20. yum makecache报错信息解决(浪费我大量时间)

热门文章

  1. Python命令行选项参数解析策略
  2. 数据结构:字典树的基本使用
  3. 内存扩展算法 linux,Linux下内存的使用率正确的算法
  4. typescript设置默认值_TypeScript 中神奇的 this 类型声明
  5. 数论基础之快速幂(详细教程)
  6. 阿里云 EventBridge 事件驱动架构实践
  7. Knative 实战:基于 Knative Serverless 技术实现天气服务-下篇
  8. hive 表存储大小_Hive中文件存储格式及大小比较测试
  9. php 下载exe 打不开,EXE文件打不开的解决方法
  10. linux代码环境配置,linux下配置环境变量【原创】(示例代码)