【CMake入门】第一节——CMake的安装与简单样例

在这里插入图片描述

CMake——Cross platform Make

  • CMake是一个开源的跨平台自动化建构系统,用来管理程序构建,不相依于特定编译器,不用亲自编写Makefile。
  • 需要编写CMakeList.txt文件来定制整个编译流程
  • 可以自动化编译源代码、创建库、生成可执行二进制文件等

安装方法

Linux:

$ sudo apt-get install cmake
$ sudo apt-get install cmake-gui #图形化界面,两者都可以

Windows:直接在官网下载对应安装包即可

CMake使用注意事项

CMakeLists.txt文件

  • CMake构建专用定义文件,文件名CMakeLists.txt严格区分大小写
  • 工程存在多个目录,可以使用一个CMakeLists.txt管理,也可以=每个目录都放一个CMakeLists.txt

CMake指令

  • CMake指令不区分大小写,自己设定风格
  • add_executable(main main.c)和ADD_EXECUTABLE(main main.c)都可以

参数和变量

  • 严格区分大小写,名称只能是字母,数字,下划线,破折号
  • 用${}引用变量
  • 参数之间使用空格间隔

简单样例

编写helloSLAM.cpp

#include <iostream>
using namespace std;

int main(int argc, char **argv) 
{
  cout << "Hello SLAM!" << endl;
  return 0;
}

在同一目录下新建一个CMakeList.txt文件,内容如下:

# 声明要求的 cmake 最低版本
cmake_minimum_required(VERSION 2.8)

# 声明一个 cmake 工程
project(HelloSLAM)

# 添加一个可执行程序,用指定的源文件为工程添加可执行文件,名字为demo
# 一般程序名和源代码文件的名字是一样的,这里为了方便区分
# 语法:add_executable( 程序名 源代码文件 )
add_executable(demo helloSLAM.cpp)

CMakeLists.txt文件用于告诉cmake要对这个目录下的文件做什么事情。在这个示例中,我们指定了一个工程名和一个可执行程序。

在终端中输入

$ cmake .

输出如下:
在这里插入图片描述
此时工程目录下的文件:
在这里插入图片描述
cmake会输出一些编译信息,然后再当前目录下生成一些中间文件,其中最重要的就是MakeFile,这是一个自动化编译的脚本。由于MakeFile是自动生成的,我们不必修改它。

现在,用make命令对工程进行编译:

$ make

终端输出:
在这里插入图片描述
如果顺利通过,我们就可以得到再CMakeLists.txt中声明的那个可执行程序demo。执行它:

$ ./demo

终端输出:
在这里插入图片描述

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

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

相关文章

msvcr110.dll丢失的解决方法有哪些-常见方法教程

我们在日常使用电脑中经常遇到各种问题&#xff0c;比如系统文件丢失是最常见的&#xff0c;其中msvcr110.dll丢失也是非常常见的问题&#xff0c;那么msvcr110.dll文件为什么会丢失&#xff0c;丢失对电脑有什么影响呢&#xff0c;丢失了有什么解决方法&#xff1f;今天小编就…

【MySQL】聚合函数和分组(查找)

聚合函数分组分组聚合如何显示每个部门的平均工资和最高工资显示每个部门的每种岗位的平均工资和最低工资显示平均工资低于2000的部门和它的平均工资(SMITH员工不参与)where 和 having 的区别 聚合函数 函数说明COUNT([DISTINCT] expr)返回查询到的数据的 数量SUM([DISTINCT] …

深度学习助力手写识别OCR软件的发展与应用

随着人工智能和深度学习技术的不断发展&#xff0c;手写识别OCR软件的技术也在不断进步。目前&#xff0c;市场上已经有一些基于深度学习的手写识别OCR软件&#xff0c;可以对手写文字进行自动识别和转换。 首先&#xff0c;我们来介绍一下基于深度学习的手写识别OCR软件的基本…

C语言能判断一个变量是int还是float吗?

C语言能判断一个变量是int还是float吗&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C语言从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&…

Qnx boot workflow

S820A QNX Hypervisor Software User Guide 80-CF838-1 Rev. Img 生成脚本: target/hypervisor/host/create_images.sh tools/build/image-builder.sh The QVM config file for the guest is instantiated within the host rootfs build file, located at root/target/hyp…

python和php语言编写大型爬虫那个更适用 ?

以我多年从事爬虫行业的经验来说&#xff0c;其实python和php两种语言都可以用于编写大型爬虫项目&#xff0c;但是因为Python语言简洁方便&#xff0c;第三方库相比有很多&#xff0c;数据处理能力也很强&#xff0c;所以受到大多数程序员的追捧。 Python和PHP都可以用于编写…

多平台展示预约的服装小程序效果如何

线下实体服装店非常多&#xff0c;主要以同城生意为主&#xff0c;但随着电商经济增长&#xff0c;传统线下自然流量变少&#xff0c;商家们会选择线上入驻平台开店获得更多线上用户&#xff0c;包括自建私域小程序等。 而除了直接卖货外&#xff0c;线上展示预约在服装行业也…

人工智能-机器翻译:技术发展与代码实战

在本文中&#xff0c;我们深入探讨了机器翻译的历史、核心技术、特别是神经机器翻译&#xff08;NMT&#xff09;的发展&#xff0c;分析了模型的优化、挑战及其在不同领域的应用案例。同时&#xff0c;我们还提出了对未来机器翻译技术发展的展望和潜在的社会影响。 关注TechLe…

class049 滑动窗口技巧与相关题目【算法】

class049 滑动窗口技巧与相关题目【算法】 算法讲解049【必备】滑动窗口技巧与相关题目 code1 209. 长度最小的子数组 // 累加和大于等于target的最短子数组长度 // 给定一个含有 n 个正整数的数组和一个正整数 target // 找到累加和 > target 的长度最小的子数组并返回…

docker配置阿里云镜像加速器

docker配置阿里云镜像加速器 1.注册一个阿里云账户 https://cr.console.aliyun.com/ 2.获取加速器地址链接 可直接复制&#xff0c;位置如下: 3.配置脚本 这个位置可以直接复制脚本&#xff0c;大家操作的时候直接复制自己的就好 sudo mkdir -p /etc/docker sudo tee /et…

应用于指纹门锁上的安全芯片ACM32FP421系列,内核性能高,安全性高,内建 AES、CRC、TRNG 等算法模块

ACM32FP421 芯片的内核基于 ARMv8-M 架构&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。内核支持一 整套 DSP 指令用于数字信号处理&#xff0c;支持单精度 FPU 处理浮点数据&#xff0c;同时还支持 Memory Protection Unit &#xff08;MPU&#xff09;用于提升应用的安…

数字化未来,亚马逊鲲鹏系统引领全新购物下单体验

随着科技的不断发展&#xff0c;人们的购物方式也在发生翻天覆地的变化。在这个数字化时代&#xff0c;亚马逊鲲鹏系统应运而生&#xff0c;成为一款集注册、买家号智能养号、自动下单、自动留评、QA等功能于一体的综合软件&#xff0c;为用户提供了全新的购物体验。 首先&…

RocketMQ-源码架构二

梳理一些比较完整&#xff0c;比较复杂的业务线 消息持久化设计 RocketMQ的持久化文件结构 消息持久化也就是将内存中的消息写入到本地磁盘的过程。而磁盘IO操作通常是一个很耗性能&#xff0c;很慢的操作&#xff0c;所以&#xff0c;对消息持久化机制的设计&#xff0c;是…

单片机的基本概念——什么是单片机、单片机的分类以及单片机的发展历史、发展趋势

什么是单片机 本文主要涉及了什么是单片机、单片机的分类、单片机发展史以及单片机的发展趋势的一些内容 文章目录 什么是单片机一、 什么是单片机1.1 微型计算机1.2 单板机1.3 单片机1.3.1 单片机的分类 二、 单片机的发展历史2.1 发展阶段2.2 单片机的特点2.3 单片机的发展趋…

ACM32F403/F433 12 位多通道,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理&#xff0c;支持单精度FPU处理浮点数据&#xff0c;同时还支持Memory Protection Unit &#xff08;MPU&#xff09;用于提升应用的…

【Kubernetes】kubeadm安装k8s1.25.0高可用集群

k8s集群搭建&#xff08;v1.25.0&#xff09; 一、初始化实验环境二、安装containerd服务2.1、安装containerd2.2、安装docker2.3、配置镜像加速器三、安装初始化k8s需要的软件包四、kubeadm初始化k8s集群4.1、设置容器运行时4.2、生成并修改配置文件4.2、初始化安装4.3、修改c…

C语言之数组(精讲)

目录 数组 数组的声明&#xff08;使用数组前的准备&#xff09; 访问数组&#xff08;数组的使用方法&#xff09; 数组的遍历 数组初始化 1.在声明变量时&#xff0c;除了必要的情况下&#xff0c;都需要对变量进行初始化。 2.我们还可以像下面在声明数组时不指定元素…

win10与 vm虚拟机win7共享文件夹创建

1:在win10&#xff08;主机&#xff09;电脑先随意共享一个文件夹 2&#xff1a;在win10&#xff08;主机&#xff09;上创建一个网络映射 右键此电脑选择映射网络驱动器 成功后会多出这个网络位置 3&#xff1a;win7虚拟机设置 在虚拟机中点击计算机右键添加一个网络位置

云HIS:新一代云架构医院信息管理系统源码(java语言)

云HIS信息管理云平台&#xff0c;提供全方位的临床系统应用&#xff0c;是国内领先的以云计算为基础&#xff0c;以云计算赋能医疗机构&#xff0c;是颠覆传统医疗信息化业态的技术与模式创新&#xff0c;以SaaS方式&#xff0c;为医疗机构提供信息系统服务&#xff0c;满足从医…

Scrapy爬虫数据存储为JSON文件的解决方案

什么是JSON文件 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人们阅读和编写&#xff0c;同时也易于机器解析和生成。它基于JavaScript Spark语言的一个子集&#xff0c;但独立于Smashing语言&#xff0c;因此在许多中…