如何使用 CMake 生成一个静态库

文章目录

    • tutorial_3/CMakeLists.txt
    • tutorial_3/src/CMakeLists.txt
    • cmake_tutorial/tutorial_3/src/hello.cpp
    • tutorial_3/src/hello.h
    • 根目录的 CMakeLists.txt
    • src 目录的 CMakeLists.txt
    • hello.cpp 和 hello.h
    • 构建过程
    • 总结

tutorial_3/CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)

project(tutorial_3)

add_subdirectory(src)

tutorial_3/src/CMakeLists.txt

include_directories(include)

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

add_library( tutorial_3 STATIC hello.cpp)

cmake_tutorial/tutorial_3/src/hello.cpp

#include "hello.h"
void hello_func(void) {
    std::cout<<"小秋SLAM代码实战笔记"<<std::endl;
	return;
}

tutorial_3/src/hello.h


#ifndef HELLO_H_
#define HELLO_H_ (1)

#include <iostream>

void hello_func(void);

#endif
add_library(<name> [STATIC | SHARED | MODULE][EXCLUDE_FROM_ALL]source1 [source2 ...])
<name>生成库的名字,直接写名字不加`lib`,会自动加上前缀。
SHARED动态库 
STATIC静态库

ADD_LIBRARY(hello SHARED hello.c)
ADD_LIBRARY(hello STATIC hello.c)

add_library( hello hello.cpp)
“hello”是生成静态库的名字,“Hello.cpp”是生成静态库的源文件。
静态库的名字会默认加上前缀"lib"和"后缀.a",静态库/动态库只是后缀名不同而已
在这里插入图片描述

这个示例展示了如何使用 CMake 生成一个静态库。在这个项目中,静态库由 hello.cpp 源文件构建,并且将输出到项目目录下的 lib 子目录中。以下是详细的文件解释和构建过程:

项目的结构如下所示:

/tutorial_3
|-- CMakeLists.txt
|-- /src
    |-- CMakeLists.txt
    |-- hello.cpp
    |-- hello.h

根目录的 CMakeLists.txt

位于 tutorial_3CMakeLists.txt 文件负责整个项目的顶级配置。

cmake_minimum_required(VERSION 2.8.4)

project(tutorial_3)

add_subdirectory(src)

这个文件设置了 CMake 的最低版本要求,定义了项目名称,并且添加了 src 子目录到构建中。

src 目录的 CMakeLists.txt

位于 tutorial_3/srcCMakeLists.txt 文件用于配置源代码目录,并生成静态库。

include_directories(include)

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

add_library(tutorial_3 STATIC hello.cpp)
  • include_directories(include):包含头文件的目录。这里没有明确的 include 子目录,所以这行可能不是必需的。
  • set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib):设置库文件的输出路径为项目根目录下的 lib 文件夹。
  • add_library(tutorial_3 STATIC hello.cpp):创建一个名为 tutorial_3 的静态库,源文件为 hello.cpp

hello.cpp 和 hello.h

hello.cpphello.h 定义了一个简单的函数 hello_func,该函数打印一条消息。

构建过程

  1. 创建一个构建目录:在项目根目录中创建一个新目录,例如 build,用于存放构建文件。

  2. 运行 CMake:从 build 目录运行 cmake .. 命令以生成 Makefile。

  3. 编译项目:在 build 目录中运行 make 命令来编译项目。

  4. 检查生成的库:生成的静态库 libtutorial_3.a 将位于 lib 目录中。

总结

这个示例展示了如何使用 CMake 创建一个静态库。通过在 CMakeLists.txt 文件中指定库的类型和源文件,CMake 可以自动处理编译过程,生成静态库文件。这种方法对于管理大型项目中的库非常有用,因为它提供了清晰和灵活的方式来组织代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/299853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

excel3基础图标与透视图表的制作

业务需求1 给逾期金额也加上条形图,同时制作各个城市的逾期发展趋势 思路&#xff1a; 操作顺序&#xff1a;选中3列数据&#xff08;8月上旬逾期金额、8月中旬逾期金额和8月下旬逾期金额&#xff09;–开始–条件格式–数据条–渐变填充&#xff08;第5个&#xff09;&#xf…

厦门大学OpenHarmony技术俱乐部开创“1+N”新模式,加速推动产学研融合

12月29日,OpenHarmony技术俱乐部再添重将——在多方见证下,厦门大学OpenHarmony技术俱乐部在翔安校区益海嘉里楼报告厅正式揭牌成立,现场出席领导及师生代表近千人。 成立仪式现场 OpenHarmony技术俱乐部 携手厦门大学共绘开源生态新图景 OpenHarmony是由开放原子开源基金…

STM32F407ZGT6时钟源配置

1、26M外部时钟源 1、25M外部时钟源

cmd命令启动C# windows服务程序

因为Process.Manage.Service.exe程序为Windows服务程序&#xff0c;不能直接双击打开&#xff0c;所以需要借助windows系统自带InstallUtil.exe程序来启动它。 以管理员身份运行cmd命令控制台窗口 输入命令进入到InstallUtil.exe程序所在的文件夹 cd C:\Windows\Microsoft.NET…

[SAP ABAP] ABAP基础语法

ABAP(Advanced Business Application Programming)是一种编程语言&#xff0c;用于SAP软件的开发和定制 SAP ABAP是一种高级语言&#xff0c;主要用于在SAP平台上为大型企业和金融机构开发企业应用程序 1. ABAP基本语法结构 ABAP源程序由注释和ABAP语句组成&#xff0c;其中…

Linux内核组成

Linux内核的组成 /boot/vmlinuz-4.18.0-80.el8.x86_64 &#xff1a;启动时用到的内核 /lib/modules/4.18.0-80.el8.x86_64 &#xff1a;内核模块 /boot/initramfs-4.18.0-80.el8.x86_64.img &#xff1a;启动时提供必要的内核模块 kernel-core安装包里面包含了Linux内核启动…

Linux驱动学习—内核定时器

1、内核定时器 1.1 Linux内核定时器概念 不同于单片机定时器&#xff0c;LInux内核定时器是一种基于未来时间点的计时方式&#xff0c;以当前时刻来启动的时间点&#xff0c;以未来的某一时刻为终止点。比如&#xff0c;现在是10点5分&#xff0c;我要定时5分钟&#xff0c;那…

Java反射和动态代理

文章目录 1、反射1.1 反射的概述1.2 反射作用1.3 获取字节码文件对象的方式1.4 字节码文件和字节码文件对象1.5 获取构造方法1.6 获取构造方法并创建对象1.7 获取成员变量并获取值和修改值1.8 获取成员方法1.9 获取成员方法并运行1.10 反射练习1.10.1 泛型擦除1.10.2 修改字符串…

vue+nodejs微信小程序基于uniapp的学生宿舍打卡失物招领管理系统

基于微信的宿舍管理系统的设计基于现有的手机&#xff0c;可以实现等功能。方便用户对宿舍管理系统查看个人中心、失物招领管理、失物认领管理、晚归打卡管理、宿舍信息管理、宿舍更新管理、交流论坛、系统管理等功能模块的管理及详细的设计与统计分析。根据系统功能需求建立的…

网络安全法解读之思维导图

一、出台背景 二、法律基础 三、网络安全法架构 1、第一章 总则&#xff08;1-14条&#xff09; 2、第二章 网络安全支持与促进&#xff08;15-20条&#xff09; 3、 第三章 网络运行安全&#xff08;21-39条&#xff09; &#xff08;1&#xff09;第一节 一般规定 &#xf…

Linux无法启动:Timed out waiting for device dev-disk-by

由于CPU风扇问题&#xff0c;导致主机无法启动&#xff1b;鉴于机器本身比较老旧&#xff0c;因此&#xff0c;决定直接把硬盘拆下后更换到新的主机上&#xff0c;更安全可靠&#xff1b;问题却因此而起&#xff1a;把硬盘更换到新主机后&#xff0c;居然无法启动&#xff0c;开…

简易机器学习笔记(九)LeNet实例 - 在眼疾识别数据集iChallenge-PM上的应用

前言 上一节大概讲了一下LeNet的内容&#xff0c;这一章就直接来用&#xff0c;实际上用一下LeNet来进行训练和分类试试。 调用的数据集&#xff1a; https://aistudio.baidu.com/datasetdetail/19065 说明&#xff1a; 如今近视已经成为困扰人们健康的一项全球性负担&…

Windows下默认关闭数字键盘

进入注册表&#xff0c;找到值HKEY_USERS 》 .DEFAULT 》 Control Panel 》 Keyboard &#xff0c;点击 Keyboard 之后在右侧窗口中找到 InitialKeyboardIndicators&#xff0c;设置为0&#xff0c;保存&#xff0c;重启电脑 该值的意义

深信服技术认证“SCSA-S”划重点:文件包含漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

永磁同步电机的磁场定向控制

目录 概述 通过系统仿真验证行为 探索模型架构 生成用于集成到嵌入式应用程序的控制器 C 代码 指定控制器模型的参考行为 创建 PIL 实现 准备用于 PIL 测试的控制器模型 测试生成的代码的行为和执行时间 结论 此示例说明从电机控制算法生成 C 代码并验证其编译行为和执…

分布式事务完美解决方案:消息中间件(kafka)+ 本地事物 + 消息校对

前言 分布式事务是要保证多个服务下的多个数据库操作的一致性。分布式事务常见解决方案有&#xff1a;二阶段、三阶段和TCC实现强一致性事务&#xff0c;其实还有一种广为人知的方案就是利用消息队列来实现分布式事务&#xff0c;保证数据的最终一致性&#xff0c;也就是我们常…

带大家做一个,易上手的家常香干炒腊肉

从冰箱那一块腊肉 套个食品级的袋子 然后用冷水化冰 准备两块香干 香干切成片 不要太薄 当然也别厚了 一把青蒜 青蒜切成段 干和叶子分开装 腊肉去掉下面的肉皮 然后切小块 锅中加入清水 下入少量油和盐 开小火 水起泡泡后下入香干 过水 半分钟左右 香干捞出备用 将腊…

Geoserver扩展发布MySQL视图功能

Geoserver中并不自带mysql数据发布功能&#xff0c;需要扩展外部插件。 1、示例以geoserver-2.20.5版本进行演示&#xff0c;所以MySQL插件需要到该版本对应的“Extensions”标题下查找&#xff0c;下载地址&#xff1a;GeoServer&#xff0c;详见下图 2、选择MySQL进入下载页…

【北邮国院大四上】Business Technology Strategy 企业技术战略

北邮国院电商大四在读&#xff0c;本笔记仅为PPT内容的整理与翻译&#xff0c;并不代表本课程的考纲及重点&#xff0c;仅为本人复习时方便阅读与思考之作。 写在前面 大家好&#xff0c;欢迎来到大学期间的最后一门课程&#xff0c;本门课程是中方课&#xff0c;所以很庆幸的…

小微企业在银行信贷相关产品和机器学习建模案例_论文科研_企业调研

各银行小微企业贷款业务 互联网的时代&#xff0c;大量新信息技术的涌现和网络的无处不在&#xff0c;想要抢占这片金融天地&#xff0c;必须重视小微金融业务&#xff0c;小微企业是一直具有重大潜力的客户&#xff0c;商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…