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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 第八十四节,css布局小技巧及font-awesome图标使用

    第八十四节,css布局小技巧及font-awesome图标使用

    2022年2月21日
    47
  • 获取的string转JSONArray或JSONObject

    获取的string转JSONArray或JSONObject² 返回值:JSON格式字符串{“serviceId”:”3c.park.queryparkstandard”,”resultCode”:0,”message”:”成功”,”dataItems”:[{“objectId”:””,”operateType”:”READ”,”attributes”:{“parkCode”:”park01″,

    2022年6月20日
    33
  • fat文件系统中,文件的物理结构_磁盘的文件系统结构

    fat文件系统中,文件的物理结构_磁盘的文件系统结构在这个系类的开篇还是先说一下文件系统是什么吧。首先来介绍一下对u盘的格式化这个操作,格式化不是仅仅删除了所有文件,还为接下的来文件存储约定了一种存放格式,这种约定的文件存放格式就叫做文件系统。再用最通俗的说法简要介绍一下,磁盘如sd卡只能存放0和1这两种二进制状态序列,数字文件本质上也是一串0和1的序列。那么磁盘存储文件怎么存放呢?你说这个简单,把一个个的文件紧挨着排列在磁盘中不就可以了吗。那么,…

    2025年6月19日
    2
  • web渗透测试—-33、HttpOnly[通俗易懂]

    web渗透测试—-33、HttpOnly[通俗易懂]HttpOnly是微软公司的InternetExplorer6SP1引入的一项新特性。这个特性为cookie提供了一个新属性,用以阻止客户端脚本访问Cookie,至今已经称为一个标准,几乎所有的浏览器都会支持HttpOnly。下面示例显示了HTTP响应标头中HttpOnly使用的语法:Set-Cookie:<name>=<value>[;<Max-Age>=<age>]`[;expires=<date>][;domain=&lt

    2022年6月30日
    40
  • 广州java培训哪家教育机构比较好_广州java培训课程

    广州java培训哪家教育机构比较好_广州java培训课程如今社会上的就业竞争非常激烈,许多公司都在不断的提高对求职者的需求,大家也逐渐的开始意识到掌握一项适用的技能是非常重要的,一技之长不仅能够给我们带来就业上的巨大优势,还能提高我们的薪资收入,让我们更上一层楼。正因如此,越来越多的同学选择在就业之前通过专业的IT培训机构掌握一项实用的专业技能,而Java成为了进入IT行业的敲门砖,而目前每个城市的Java培训机构都有很多,让人难以选择,经调查,大部分的同学会通过一些排名榜进行参考,而今天,排名榜小编为大家主要介绍广州Java培训机构排名,主要通过教学质量,

    2022年10月3日
    3
  • r语言同时画两张图(如何用布局和视口出图)

    ​01—图形组合布局par(mfrow=c(2,2))par(mfrow=c(2,2)),可以理解将绘图区域分割为2×2的矩阵区域,另可参照《R语言实战》3.5图形的组合##################par(mfrow=c(2,2))####################attach(iris)opar<-par(no.readonly=TRUE)#data(iris)#head(iris)#>head(iri…

    2022年4月16日
    91

发表回复

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

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