【CMake】如何使用CMake构建一个工程

news2024/12/25 0:20:46

1.如何使用CMake构建一个工程

1. 使用 CMakelists.txt 构建工程

一个最简单 CMake 的项目是将某个源文件构建成为可执行文件,使用CMake 构建项目时,你需要创建一个 CMakeLists.txt 文件,通常情况下,下面三条命令在每个 CMakeLists.txt 文件中都会包含:

cmake_minimum_required():指定了当前文件中的所有 CMake 指令所需要的最低 CMake版本。

project() :指定当前的项目名称,该命令需要在每个项目中调用,并且调用顺序在cmake_minimum_required() 之后,该命令也可以用来区分其他项目的级别信息又或者是语言和版本号。

add_executable() :该条指令告诉 CMake 创建可执行文件所使用的源文件。

具体代码如下图所示:

在这里插入图片描述

2. 指定 C++ 标准

CMake 通过一些以 CMAKE_ 开头的变量来指定某些参数,例如本节中的 C++ 标准,需要指定下面两个宏:

CMAKE_CXX_STANDARD

CMAKE_CXX_STANDARD_REQUIRED

具体用到的命令为 set() ,如下图所示:

3. 添加版本号和配置头文件

我们可以给自己的项目指定版本号,同时希望能够打印出版本号的内容,使用一个配置头文件可以实现上述操作

首先在项目后面添加版本号:

project(Tutorial VERSION 1.0)

然后创建一个配置头文件 TutorialConfig.h.in ,在文件内指定版本号:

#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

这里的 @Tutorial_VERSION_MAJOR@@Tutorial_VERSION_MINOR@ 在之后都会被替换为相应设定的版本号。

然后在 CMakeLists.txt 文件中将该文件输出到 cmake build 目录中,使用的命令为configure_file() 这条指令的具体使用方式可以看这篇文章:【CMake】CMake的configure_file指令_cmake configure_file_Yngz_Miao的博客-CSDN博客

在这里使用的命令为 configure_file(TutorialConfig.h.in TutorialConfig.h) ,其中TutorialConfig.h.in为我们刚创建好的文件,TutorialConfig.h 为指定输出的文件名,输出文件存放在 build 目录:

如果想使用该头文件,还需要使用一条命令:target_include_directories() 来对头文件进行链接,target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}")

意思是将项目的二进制文件夹(编译的 build 文件夹)作为 include 目录,该命令的具体使用方式也可以参考这篇文章:cmake:target_include_directories、include_directories、add_executable_cmake target_include_directories_OceanStar的学习笔记的博客-CSDN博客 有关该函数的参数放在后续学习,先码一下。

最后的 CMakelists.txt 如下:
请添加图片描述

在cpp中简单测试一下:

请添加图片描述

cmd中输入:./Tutorial
在这里插入图片描述
Reference: [Step 1: A Basic Starting Point](https://cmake.org/cmake/help/latest/guide/tutorial/A Basic Starting Point.html)

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

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

相关文章

四结4.20

这俩天实现了分离客服端和服务端, 先将对象序列化,通过socket从客户端发送到服务端,反序列化 进行数据库操作,最后向客户端返回结果,渲染javafx的画面 中途遇到俩种异常,因为一报错弹出一大段红色的英语…

力扣sql中等篇练习(九)

力扣sql中等篇练习(九) 1 电影评分 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # 只要一个 可以考虑order by加上 limit的组SELECT子句中子查询的结果 # 电影名称和姓名不可能重复,所以直接Union a…

【RecyclerView】同时刷新和滚动导致,滚动位置异常(一)

前置: 被选中item高度与非选中item高度不一致,且硬件有点卡,运行会有一定卡顿。 可视界面的item为三个,总数据为十个。 期望效果: 》 实际上效果: 代码: mListAdapter.setSelectedPosition(…

学成在线笔记+踩坑(6)——【媒资模块】视频处理。FFmpeg+XXL-JOB

导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题 目录 1 视频转码需求 1.1 视频编码格式和文件格式 1.2 windows使用编码工具FFmpeg 1.3 视频处理工具类 1.3.1 拼装FFmpeg命令的各工具类 1…

复旦MOSS大模型开源了「中国版ChatGPT」,Github和Hugging Face同时上线

最近,ChatGPT非常火,从ChatGPT3到ChatGPT4,都非常火。无论是否为互联网行业的,多少都听到过关于ChatGPT的消息。虽然百度、阿里等互联网巨头都已经宣布将会推出相关的类ChatGPT产品。但目前还未有成型的产品上线。 而昨日&#x…

94. 二叉树的中序遍历【119】

难度等级:容易 上一篇算法: 102. 二叉树的层序遍历【206】 力扣此题地址: 94. 二叉树的中序遍历 - 力扣(Leetcode) 1.题目:94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序…

AlgoC++第四课:逻辑回归

目录 逻辑回归前言1. 鸢尾花分类问题1.1 基于线性回归的思考1.2 损失函数 2. 伯努利分布3. 示例代码3.1 数据可视化3.2 日志信息打印3.3 数据读取和处理3.4 逻辑回归模型3.5 完整示例代码3.6 python实现 4. 思考总结 逻辑回归 前言 手写AI推出的全新面向AI算法的C课程 Algo C&…

InnoDB中必须要了解的几个关键特性

InnoDB引擎在设计中使用了很多技术思想。下面我们主要介绍一些InnoDB的关键特性,帮助你去更好了解 InnoDB。 关键特性 1.预读(1)预读的两种算法(2)在InnoDB中相关配置 2.插入缓冲2.1 Insert Buffer2.2 Change Buffer2…

跨域的五种最常见解决方案

这是一篇笔记 什么是跨域? 跨域不是问题,是一种安全机制。浏览器有一种策略名为同源策略,同源策略规定了部分请求不能被浏览器所接受。 值得一提的是:同源策略导致的跨域是浏览器单方面拒绝响应数据,服务器端是处理…

C#基于asp.net的企业人事管理系统的研究与实现

(一)任务 1.本课题的任务是对人事管理系统的管理过程进行分析,列出逻辑实现过程,对系统进行逻辑设计和数据库设计; 2.主要实现系统管理、档案管理、考勤管理、薪水管理等功能; 3.实现企业员工的相关信息&am…

一篇文章教你解决node-sass 4.12.0 安装失败,一劳永逸

已知: 使用mac电脑使用的node版本是v14.20.0 问题:在安装node-sass 4.12.0的时候报错如下 看到这一堆错误,千万不要立马复制粘贴到浏览器去搜,感觉像无头苍蝇乱撞,好歹稍微看一下什么意思。 显而易见是有一个文档40…

浅析低代码开发的典型应用构建场景v

在数字经济蓬勃发展的大势之下,企业软件开发人员供给不足、开发速度慢、开发成本高、数字化和智能化成效不明显等问题日益凸出,阻碍了企业的数字化转型。 而近年来,低代码的出现推动了经济社会的全面提效,也成为人才供求矛盾的润…

【Docker】限制已运行容器的Cpu和内存

docker限制已运行容器的Cpu和内存 本文首发于 慕雪的寒舍 1.问题描述 最近云服务器的内存经常不够用,而且是莫名其妙的增多,在腾讯云的控制台里面看,4g的内存占用了3.2g,就卡到连ssh都连不上了 PS: 已换过网络和设备&#xff0c…

只要10分钟,零代码基础搞定炫酷大屏设计(内附详细教程)

近几年可视化大屏再次被推上热搜,无论是已经结束的疫情时代指挥中心大屏,还是每年购物节的大屏数据成交额,或者是日常会议中的大屏分析,到处都是可视化大屏的身影。 有人会说,这种大屏一定需要大量的财力、技术顶端的…

开源构建系统Buck2发布

看来最近 Meta 的工程师是一点都没有闲着,前两天刚开源 AI 图像分割模型,这不就又发布了名为 Buck2 的开源构建系统。 Buck2 是一个已经在 Meta 内部使用了一段时间的大型构建系统,目前 Meta 有数千名开发人员正在使用该构建系统,…

IP地址配置

1.vi /etc/sysconfig/network-scripts/ifcfg-ens33 (在配置文件中修改) 配置文件内容为: IPADDR:配置IP地址 NETMASK:配置子网掩码 GATEWAY:配置网关 DNS:配置dns地址 BOOTPROTO:设置获取ip的方式\DHCP为动态获取\ static为…

C++(GCC)生成和使用静态库

C(GCC)生成和使用静态库 文章目录 C(GCC)生成和使用静态库1、前言1.1 什么是静态库1.2 静态库优缺点1.3 C使用静态库的方法1.4 注意事项 2、linux下C生成静态库.a3、链接使用静态库 更多精彩内容👉个人内容分类汇总 &a…

可算是熬出头了,测试4年,费时8个月,入职阿里,涨薪14K

前言 你的努力,终将成就无可替代的自己。 本科毕业后就一直从事测试的工作,和多数人一样,最开始从事点点点的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态。 一年半…

蓝牙耳机接打电话哪个比较好?接打电话最好的蓝牙耳机

技术已经发展到如此程度,耳机可以淹没嘈杂环境中不断出现的杂音,同时还能让我们在通话、音乐和娱乐方面保持清晰,既然如此,我们就来整理一下2023年适合通话和娱乐的无线耳机清单。 一、南卡小音舱Lite2蓝牙耳机 参考价格&#x…

Ubuntu系统下Python的虚拟环境搭建方法

文章目录 参考链接:一、Python虚拟环境的作用及创建方法简介1. 创建虚拟环境的必要性2. venv、virtualenv、pipenv三种创建虚拟环境方法比较2.1 搭建Python虚拟环境的方法2.2 venv、virtualenv方法2.3 pipenv方法 二、 virtualenv搭建虚拟环境1. 环境准备1.1 安装vi…