如何使用 CMake 来构建一个共享库(动态库)

tutorial_4/CMakeLists.txt

# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )# 声明一个 cmake 工程
project( HelloSLAM )add_subdirectory(src)

tutorial_4/src/CMakeLists.txt

#工程添加多个特定的头文件搜索路径
include_directories(include)set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 共享库
add_library( tutorial_4 SHARED tutorial_4.cpp)

tutorial_4/src/tutorial_4.cpp

//这是一个库文件
#include <iostream>
using namespace std;/*** 代码作者:小秋SLAM实战教程* 开发环境:Ubuntu 16.04* 运行依赖:C++ 11*/void printHello()
{std::cout<<"小秋SLAM实战教程"<<std::endl;
}

tutorial_4/src/tutorial_4.h

#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
// 上面的宏定义是为了防止重复引用这个头文件而引起的重定义错误void printHello();#endif

add_library( tutorial_4 SHARED tutorial_4.cpp )
“tutorial_4”是生成共享库的名字,“tutorial_4.cpp”是生成共享库的文件。
共享库的名字会默认加上前缀"lib"和"后缀.so"。
在这里插入图片描述

这个示例展示了如何使用 CMake 来构建一个共享库(动态库)。在此项目中,共享库是由 tutorial_4.cpp 源文件构建的,并将输出到项目目录下的 lib 子目录中。下面是详细的文件解释和构建过程:

项目的结构如下所示:

/tutorial_4
|-- CMakeLists.txt
|-- /src|-- CMakeLists.txt|-- tutorial_4.cpp|-- tutorial_4.h

根目录的 CMakeLists.txt

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

cmake_minimum_required(VERSION 2.8)
project(HelloSLAM)
add_subdirectory(src)

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

src 目录的 CMakeLists.txt

位于 tutorial_4/srcCMakeLists.txt 文件用于配置源代码目录,并生成共享库。

include_directories(include)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
add_library(tutorial_4 SHARED tutorial_4.cpp)
  • include_directories(include):包含头文件的目录。
  • set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib):设置库文件的输出路径为项目根目录下的 lib 文件夹。
  • add_library(tutorial_4 SHARED tutorial_4.cpp):创建一个名为 tutorial_4 的共享库(动态库),源文件为 tutorial_4.cpp

tutorial_4.cpp 和 tutorial_4.h

tutorial_4.cpptutorial_4.h 定义了一个简单的函数 printHello,该函数打印一条消息。

构建过程

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

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

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

  4. 检查生成的库:生成的共享库 libtutorial_4.so 将位于 lib 目录中。

总结

这个示例展示了如何使用 CMake 创建一个共享库(动态库)。通过在 CMakeLists.txt 文件中指定库的类型和源文件,CMake 可以自动处理编译过程,生成共享库文件。共享库适用于那些需要动态加载或节省内存空间的应用场景。这种方法对于管理大型项目中的库非常有用,因为它提供了清晰和灵活的方式来组织代码。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础知识总结

目录 一、Linux权限设置 更改文件属性 chgrp - 更改文件属组 chown - 更改文件所有者&#xff0c;也可以同时更改文件所属组。 chmod - 更改文件属性 二、Linux文件与目录管理 处理目录的常用命令 ls&#xff08;list files&#xff09;- 列出目录及文件名 cd&#xff…

记.backward()报错

最近我在模型训练损失里加入了LPIPS深度感知损失&#xff0c;训练的时候就出现了如上的报错&#xff0c;具体解释为&#xff1a;调用梯度反向传播loss.backward()时&#xff0c;我们计算梯度&#xff0c;需要一个标量的loss(即该loss张量的维度为1,只包含一个元素&#xff09;&…

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

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

数据库原理与应用期末复习试卷1

数据库原理与应用期末复习试卷1 一.单项选择题 数据库系统是采用了数据库技术的计算机系统&#xff0c;由系统数据库&#xff0c;数据库管理系统&#xff0c;应用系统和&#xff08;C&#xff09;组成。 ​ A.系统分析员 B.程序员 C.数据库管理员 D.操作员 数据库系统的体系…

Mybatis实现增删改查的两种方式-配置文件/注解

环境准备 1.数据库表tb_brand -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand(-- id 主键id int primary key auto_increment,-- 品牌名称brand_name varchar(20),-- 企业名称company_name varchar(20),-- 排序字段ordered int…

数据库系统-甘晴void学习笔记

数据库系统笔记 计科210X 甘晴void 202108010XXX 教材&#xff1a;《数据库系统概论》第6版 &#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文章目录 数据库系统<br>笔记第一篇 基础篇1 绪论1.1数据库系统概述1.2数据模型1.3数据库系统的结构(三级模式结构…

windows@ftp服务器设置@ftpServer

文章目录 windows自带的ftp服务功能下面是核心步骤FAQ windows自带的ftp服务功能 windows自带的方式步骤稍微繁琐 该功能系统往往不会默认启用,需要启动windows的功能配置防火墙(否则可能其他设备无法访问)但是不失为一种方案(毕竟作为一种基础通信协议,不需要额外安装软件) 参…

看图识熊(三)

使用Windows Machine Learning加载ONNX模型并推理 环境要求 Windows Machine Learning支持在Windows应用程序中加载并使用训练好的机器学习模型。Windows 10从10.0.17763.0版本开始提供这套推理引擎&#xff0c;所以需要安装17763版本的Windows 10 SDK进行开发&#xff0c;并…

〔025〕Stable Diffusion 之 接口开发 篇

✨ 目录 ▷ 启动接口▷ 接口文档▷ 接口开发▷ 代码解释▷ 启动接口 想要在各种其他服务中对接 Stable Diffusion 的绘画功能,需要开启 Stable Diffusion 的 api 功能开发接口需要有一定的技术功底才可以,非技术人员其实不用学习直接在 webui-user.bat 文件中的 set COMMANDL…

国内女足球员限薪120万;越南总人口突破1亿;华科阿里等联合打造 TF-T2V 视频方案,无需文本标注

今日精选 • 华科阿里等联合打造 TF-T2V 视频方案&#xff0c;无需文本标注• 越南总人口突破1亿• 国内女足球员限薪120万• 专家建议取消大城市买房买车限制 大模型 • OpenAI 和微软遭大规模起诉 “窃取”他人作品训练 AI 模型• Salesforce 研究提出新视频生成 AI 模型 …

力扣:438. 找到字符串中所有字母异位词 题解

Problem: 438. 找到字符串中所有字母异位词 438. 找到字符串中所有字母异位词 预备知识解题思路复杂度Code其它细节推荐博客或题目博客题目滑动窗口哈希表 预备知识 此题用到了双指针算法中的滑动窗口思想&#xff0c;以及哈希表的运用。c中是unordered_map。如果对此不了解的u…

消除字母Scratch-第14届蓝桥杯Scratch省赛真题第6题

6. 消除字母&#xff08;100分&#xff09; 编程实现&#xff1a;消除字母。 具体要求&#xff1a; 1). 点击绿旗&#xff0c;角色、背景如图所示&#xff08;创建1个字母表&#xff0c;并存入26个字母&#xff09;&#xff1b; 2). 等待1秒&#xff0c;阿拉蕾说&#xff1…