首页 > 其他分享 >使用cmake构建一个动态库的例子

使用cmake构建一个动态库的例子

时间:2024-11-02 18:08:39浏览次数:5  
标签:include cmake void library 例子 构建 动态

接触cmake很多年了,但是从来没自己写一个完整的CMakeLists.txt构建过自己的动态库,因为工作以来动态库我都是用别人开源的,基本没有构建自己动态库的需求。今天需要将一个使用automake构建的老库替换为cmake来构建于是了解了一些相关细节,准备迁移过来。

极简例子

以C语言为例,一个动态库至少要包含两个源文件,一个.c,一个.h。为啥?.c包含函数实现,.h给别人#include。源码例子如下:

library.h

#ifndef CSHAREDLIB_LIBRARY_H
#define CSHAREDLIB_LIBRARY_H

void hello(void);

#endif //CSHAREDLIB_LIBRARY_H

library.c

#include "library.h"

#include <stdio.h>

void hello(void)
{
    printf("Hello, World!\n");
}

CMakeLists.txt

#指定cmake最低版本要求,因为可能这个CMakeLists.txt中引用的特性,内置函数,语法是特定版本才开始引入的
cmake_minimum_required(VERSION 3.22)
project(MyShared)
#构建动态库的关键一句,其中第二个参数SHARED是关键字,表示生成动态库,也可以是STATIC或者省略,表示生成静态库(.a)。
add_library(MyShared SHARED library.c library.h)

执行cmake生成Makefile,良好的习惯是把构建过程中的中间文件放在一个单独的目录,不和源码目录混在一起:

mkdir build
cd build 
cmake ..
make

于是动态库libMyShared.so被编译出来了。这样就完了吗?如果你是比较狂野的人,这样确实完了。

标签:include,cmake,void,library,例子,构建,动态
From: https://www.cnblogs.com/thammer/p/18522238

相关文章

  • cmake简介以及入门使用教程
    目录cmake是什么安装简单使用流程一个简单的demo命令解析这篇文章是比较简单的入门使用指南,所以很多内容并不会具体展开,主要是为了让一些不懂cmake的人有一个直观的认识,cmake远不止这篇文章里讲的那么简单,cmake非常强大。cmake是什么我们都知道要生成一个C++可执行......
  • 信息学科平台系统构建:Spring Boot框架深度解析
    4系统概要设计4.1概述本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示:图4-1系统工作原理图4.2系统结构本系统......
  • 项目自动化构建工具——make与Makefile详解
    项目自动化构建工具——make与Makefile详解在软件开发过程中,项目自动化构建是提高开发效率、减少重复劳动、确保构建一致性的重要手段。make和Makefile作为Linux及类Unix系统中不可或缺的自动化构建工具,通过定义清晰的规则和依赖关系,极大地提高了软件项目的构建效率和可维......
  • 解释 RESTful API,以及如何使用它构建 web 应用程序。
    RESTfulAPI(RepresentationalStateTransfer)是一种设计风格,用于构建可扩展的网络服务。它基于HTTP协议,并使用标准的HTTP方法(例如GET、POST、PUT、DELETE)来实现对资源的创建、读取、更新和删除操作。RESTfulAPI的关键原则是将服务端的资源通过URL(统一资源定位符)暴露给......
  • 数据对象:构建高效数据管理的基础
    数据对象通常指在编程或数据分析中用于存储和处理数据的结构。它们可以是简单的变量,如整数或字符串,或更复杂的结构,如列表、字典、数组、类等。具体来说,数据对象可以包括:1.**基本数据类型**:  -整数(Integer)  -浮点数(Float)  -字符串(String)  -布尔值(Boolean)......
  • 读数据工程之道:设计和构建健壮的数据系统25查询
    1. 查询1.1. 通过理解查询、建模和转换​,你会掌握将原始数据转化为下游利益相关者可用数据的工具1.2. 被很多人熟知的SQL,这是最流行和通用的查询语言1.3. 查询是数据工程、数据科学和数据分析的基础1.4. 在了解数据转换的基本模式和技术之前,你需要了解什么是查询、它如......
  • ARKit:ARKit场景构建与物体添加_2024-07-25_16-48-31.Tex
    ARKit:ARKit场景构建与物体添加ARKit基础介绍ARKit框架概述ARKit是苹果公司为iOS设备提供的增强现实开发框架,它允许开发者在iOS应用中创建沉浸式的AR体验。ARKit通过设备的摄像头、传感器和处理器,能够实时地检测和跟踪真实世界中的平面、光照、运动和环境特征,从而在这些平......
  • 基于LLM构建应用程序:设计指南
    在前2节中,我们介绍了LLM的基本原理,以及如何在企业的真实业务中,应用LLM(大语言模型)。大语言模型:LLM的基本原理解读大语言模型:LLM如何应用到实际的业务中如果感觉还不错的话,欢迎关注“AI产品经理社”,收看后续的专题更新。今天我们来详细介绍一下:基于LLM构建应用程序:设计指......
  • colcon构建工具
    colcon工具相对于bazel等,效率不算高,但是其模块化做得好,易用性程度高通过解析package.xml获取配置信息,包括描述规范,名称,版本,构建方法和测试方法等有关依赖会附有_depend扩展名说明如构建依赖build_depend构建工具依赖buildtool_depend测试依赖test_depend运行依赖exec_depend......
  • 一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性
    前言:什么是依赖注入依赖注入可以提高代码的可维护性、可测试性、可替换性和可扩展性,降低组件之间的耦合度,使得代码更加清晰和灵活,ASP.NETCore提供了内置的依赖注入容器,可以帮助我们轻松地将服务注册到容器中。本文主要通过一个简单的例子来阐述ASP.NETCore依赖注入的使用......