Ubuntu 18.04使用CMake编译可执行文件、动态链接库

news2024/9/21 5:42:37

目录

  • 准备
    • 新建文件
    • 编辑源文件
  • 编译生成可执行文件
  • 编译生成动态链接库

准备

新建文件

在开始之前,我们先准备一个项目所需要的基本结构。

  • 新建一个项目的文件夹test_so
  • 在项目文件夹中新建一个src文件夹存放源代码(并新建一个test.cpp文件),一个build文件夹存放编译过程中产生的各种文件
  • 新建一个CMakeLists.txt文件,这也是CMake进行编译所必须的文件。
    准备好的文件结构如下所示:
    在这里插入图片描述

在这里插入图片描述

编辑源文件

src文件夹中新建一个test.cpp文件,并加入以下内容。

/**
 * @file test.cpp
 * @author xiaochen (xchwang@whu.edu.cn)
 * @brief 
 * @version 0.1
 * @date 2023-01-02
 * 
 * @copyright Copyright (c) 2023 Xiaochen Wang
 * 
 */
#include <iostream>

using namespace std;

int main(int argc, char** argv){
    std::cout << "hello word!" << std::endl;
    return 0;
}

编译生成可执行文件

在CMakeLists.txt文件中加入下述内容:

cmake_minimum_required(VERSION 2.8)
project(Test)
 
set( CMAKE_BUILD_TYPE "Release" )
set(CMAKE_CXX_FLAGS "-std=c++11 -O3")

add_executable(Test ./src/test.cpp)

保存之后,在build文件中打开一个终端,输入下述命令。

cmake ..

make

之后,我们在build文件中可以找到一个新生成的Test文件。
在终端中使用下述命令执行:

./Test

输出hello word!
在这里插入图片描述

至此,我们完成了编译生成可执行文件的操作过程。

编译生成动态链接库

修改CMakeLists.txt文件内容如下所示:

cmake_minimum_required(VERSION 2.8)
project(Test)
 
set( CMAKE_BUILD_TYPE "Release" )
set(CMAKE_CXX_FLAGS "-std=c++11 -O3")

add_library(TestLib SHARED ./src/test.cpp)

同样的,在build文件中打开一个终端,输入下述命令。

cmake ..

make

在这里插入图片描述

我们可以看到新生成了一个 libTestLib.so 文件,这就是我们需要的动态链接库,能够分享给其他人进行使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于 Prometheus 的监控平台简介

1. Prometheus 体系架构简介 Prometheus 是 CNCF 基金会的一款开源产品&#xff0c;主要用做监控系统&#xff0c;通常用来和 Zabbix 等监控系统做比较&#xff0c;以其简单易用、架构灵活著称。整个 Prometheus 的架构如上&#xff0c;分为几个重要的部分&#xff1a; 指标收…

Kubernetes:Ingress

文章目录1、安装 Ingress 控制器2、Ingress 扇出3、基于名称的虚拟托管4、Ingress TLSIngress 是一组路由规则&#xff0c;公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 Ingress 控制器是一组 pod&#xff0c;负责通过负载均衡器来解析 Ingress 路由规则&#xff0c;将请…

序列到序列学习(seq2seq,BLEU)

根据“编码器-解码器”架构的设计&#xff0c; 我们可以使用两个循环神经网络来设计一个序列到序列学习的模型。 在实现编码器和解码器时&#xff0c;我们可以使用多层循环神经网络。 我们可以使用遮蔽来过滤不相关的计算&#xff0c;例如在计算损失时。 在“编码器&#xf…

crackme01——Acid_burn

最近对逆向稍微有点兴趣&#xff0c;自学了一点。写这个文章主要用于记录学习的过程。 首先看一下这个程序&#xff0c;其实就是个简单的比对程序&#xff0c;主界面按左侧按钮进入Name Serial界面&#xff0c;点击【Check it Baby】&#xff0c;则弹出窗口【Sorry, The seria…

[Java]JDBC学习笔记(尚硅谷康师傅JDBC)

文章目录&#x1f97d; 视频链接及资源下载&#x1f97d; JDBC简介&#x1f97d; JDBC程序访问数据库步骤&#x1f97d; 获取数据库连接&#x1f30a; 导入jar包&#x1f30a; Driver 接口&#x1f30a; JDBC URL&#x1f30a; 方式1&#xff1a;&#x1f30a; 方式2&#xff1…

educoder数据结构与算法 线性表 第2关:实现一个链接存储的线性表

本文已收录于专栏 &#x1f332;《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》&#x1f332; 目录 本文已收录于专栏 &#x1f332;《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》&#x1f332; &#x1f350;任务描述&#x1f350; &#x1f350;相关知识…

Java基础学习笔记(九)—— 常用API(2)

常用API1 Math类2 system类3 Object类3.1 概述3.2 常用方法3.3 常见面试题4 Objects类5 BigDecimal类5.1 构造方法5.2 常用方法6 时间日期类6.1 Date类6.2 SimpleDateFormat类6.3 JDK8新增日期类1 Math类 Math 包含执行基本数字运算的方法 Math中方法的调用方式&#xff1a;M…

Markdown 使用语法(详细)

想要学习Markdown&#xff0c;这篇文章就够了。 Markdow简介 Markdown 是一种轻量级标记语言&#xff0c;创始人为约翰格鲁伯&#xff08;John Gruber&#xff09;。 它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的 XHTML&#xff08;或者HTML&…

IEEE期刊投稿流程

一、注册过程 1.1、确定期刊。 首先可以通过IEEE搜索需要投稿的期刊(以TMC为例)&#xff0c;然后点击Submit Manuscript ,进入ScholarOne主页 1.2、账号注册。 进入到ScholarOne之后&#xff0c;若没有注册过需要先注册一个账号。 1.3、创建账户。 点击Create an Account&a…

【LeetCode每日一题】【2023/1/2】1801. 积压订单中的订单总数

文章目录1801. 积压订单中的订单总数方法1&#xff1a;模拟优先队列part1priority_queue的使用part2求余代码1801. 积压订单中的订单总数 LeetCode: 1801. 积压订单中的订单总数 中等\color{#FFB800}{中等}中等 给你一个二维整数数组 orders &#xff0c;其中每个 orders[i] …

基于springboot+Vue学生宿舍管理系统(程序+数据库+文档+代码解读)

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

使用Cramer-Rao和Athley边界分析到达角阵列的质量(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 此代码用于使用Cramer-Rao和Athley边界分析到达角阵列的质量。 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 [1]王凯欣…

感谢、感恩与CSDN结缘的第1498天

导读&#xff1a;2023年1月1日&#xff0c;这是本人加入CSDN的1498天&#xff0c;还记得2018-11-26是注册加入CSDN的第一天&#xff0c;当时的初心就是单纯想作为一名普通的IT人&#xff0c;随着不断打拼职场岁月流逝&#xff0c;总想沉淀留下点东西&#xff0c;即使再平凡也总…

【数据集8】全球人口数据WorldPop详解

全球人口数据WorldPop WorldPop是由南安普顿大学在2013年10月发起的全球人口数据评估。与LandScan数据相比&#xff0c;这个数据涵盖的数据集的社会经济属性更多一些&#xff0c;比如包括了年龄性别结构、出生率、人口流动、航班联系等数据&#xff0c;可参见下图。 官网地址-…

网络信息安全-图像隐写与检测综述

任务目标&#xff1a; 本选题需要学习经典的图像信息隐藏算法&#xff0c;包括基于空域的隐写算法和数字水印算法。 接着你将使用某种编程语言实现这些算法&#xff0c;实现在图片中嵌入一些信息&#xff0c;例如字符串和一些 文件。除此之外&#xff0c;还需要尝试一些基础的…

MySQL8--通过角色管理权限

原文网址&#xff1a;MySQL8--通过角色管理权限_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MySQL8如何通过角色管理权限。 角色是在MySQL8.0中引入的新功能。在MySQL中&#xff0c;角色是权限的集合&#xff0c;可以为角色添加或移除权限。用户可以被赋予角色&#xff0c;同时也…

洛普兰机械密封盛装亮相2023第11届济南生物发酵展

洛普兰机械密封与您相约2023第11届济南生物发酵展览会&#xff0c;3月30-4月1号山东国际会展中心&#xff0c;诚邀参会&#xff01; 展位号&#xff1a;3号馆H32 2023生物发酵展将于3月30号山东国际会展中心&#xff08;济南市槐荫区日照路1号&#xff09;盛大召开&#xff0…

Spring(四):Bean作用域和生命周期

目录一、Bean作用域作用域1.1 Bean作用域简介1.2 作用域的定义1.3 Bean的6种作用域1.4 设置作用域二、Spring的执行流程和Bean的生命周期2.1 Spring的执行流程2.2 Bean的生命周期一、Bean作用域作用域 1.1 Bean作用域简介 现在有一个公共的Bean&#xff0c;A用户先使用到这个…

统计学中的Bootstrap方法(Bootstrap抽样)用来训练bagging算法,如果随机森林Random Forests

统计学中的Bootstrap方法&#xff08;Bootstrap抽样&#xff09;用来训练bagging算法&#xff0c;如果随机森林Random Forests 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对…

Java与Python常见语法对比及区别

这里写目录标题一、前记1.1为什么写这篇文章&#xff1f;1.2 本文的结构二、整体区别2.1 差异总结十句话2.2整体对比三、细节区别3.1数据类型3.2其他数据结构3.3 String的处理方法3.4数组3.5条件语句3.6循环语句3.7类和接口定义与调用四 其他技巧知识字节的换算Tips&#xff1a…