1. CMake 系列 – 从零构建动态库和静态库

1. CMake 系列 – 从零构建动态库和静态库

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_H int 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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119546.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 图片连续循环滚动代码(向上、下、左、右)

    图片连续循环滚动代码(向上、下、左、右)向上:向下:向左:向右:

    2022年7月1日
    25
  • DirectX修复工具下载(exagear模拟器数据包在哪里)

    DirectX修复工具通用数据包2019Q3版大小:135MB/7z格式压缩下载地址1:https://download.csdn.net/download/vbcom/11692840说明:本资源中包含DirectX修复工具数据包2019Q3版,适合已经有主程序而缺少数据包的用户使用。本数据包为通用数据包,适合各种版本的Direc…

    2022年4月13日
    468
  • java dom4j方式读取xml文件并解析

    java dom4j方式读取xml文件并解析javadom4j 方式读取 xml 文件并解析

    2025年10月7日
    4
  • Nmap命令详解及常用命令总结[通俗易懂]

    Nmap命令详解及常用命令总结[通俗易懂]Nmap学习文章目录Nmap学习0Nmap介绍1Nmap命令详解1.1Nmap命令help详解(内附中文翻译)1.2Nmap命令思维导图2Nmap常见使用场景以及相关命令2.1Nmap常用扫描命令2.1.1扫描固定端口,以sqlServer为例2.1.2获取远程主机的系统类型及开放端口2.1.3列出开放了指定端口的主机列表2.1.4在网络寻找所有在线主机2.1.5…

    2022年5月28日
    115
  • 双机流水作业调度问题——Johnson算法「建议收藏」

    双机流水作业调度问题——Johnson算法「建议收藏」概述流水作业是并行处理技术领域的一项关键技术,它是以专业化为基础,将不同处理对象的同一施工工序交给专业处理部件执行,各处理部件在统一计划安排下,依次在各个作业面上完成指定的操作。流水作业调度问题是一个非常重要的问题,其直接关系到计算机处理器的工作效率。然而由于牵扯到数据相关、资源相关、控制相关等许多问题,最优流水作业调度问题处理起来非常复杂。已经证明,当机器数(或称工序数)大于等于3时,流水作业调度问题是一个NP-hard问题(e.g分布式任务调度)。粗糙地说,即该问题至少在目前基本上没有可能找到多项

    2025年5月24日
    3
  • java如何分析dump文件_生成dump文件命令

    java如何分析dump文件_生成dump文件命令1.IBMMemoryAnalyzer1)下载地址:https://www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/heapanalyzer/Xa.2/Xb.NoLhAb4A5Mgi2gFYiaC87ef6mY6etlyzorxxZVT3hQ/Xc.heapanalyzer/ha408.zip/Xd./Xf.LPr.U1ay/Xg.5748730/X…

    2022年10月2日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号