CMake学习(一)

news/2024/11/16 16:25:11/文章来源:https://www.cnblogs.com/mint-garden/p/18327670

CMake学习(一)

1、简介

image
CMake是一个强大的软件构建系统,可以用简单的语句来描述所有平台的安装(编译过程)
可以编译源代码、制作程序库、产生适配器(wrapper)、还可以用任意的顺序建构执行档

https://cmake.org/

2、构建基础项目

最基础的 CMake 项目是由单个源代码文件构建的可执行文件
对于这种简单的需求,我们所需要用到的仅仅是一个名为CMakeLists.txt的文件以及三条命令

cmake_minimum_required()

任何项目最顶层的CMakeLists.txt文件必须以cmake_minimum_required()命令开头,用来指定最小支持的CMake版本
这将建立策略设置,并确保随后编写的CMake配置能够在兼容的CMake版本下执行

project()

如果想要启动一个项目,那么就使用project()来设置项目的名称
每个项目都需要调用该命令,并且应在 make_minimum_required() 之后尽快调用
除此以外,该命令还可用于指定其他项目级信息,如语言或版本号

add_executable()

add_executable() 命令告诉 CMake 使用指定的源代码文件创建一个可执行文件

2.1、文件配置

直接创建一个目录cmake_demos,里面只放两个文件,一个是源代码文件main.cpp,另一个是CMake的配置文件CMakeLists.txt
image
main.cpp文件中是简单的C++代码

#include<iostream>
int main()
{std::cout << "Hello, CMake!" << std::endl;
}

CMakeLists.txt依照以上内容进行一些项目配置

# 指定最低支持的CMake版本
cmake_minimum_required(VERSION 3.10)
# 设置项目名称
project(Beginner)
# 将指定源文件编译成可执行文件
add_executable(App main.cpp)

简单看下我们的配置,首先,声明了支持的CMake版本最低支持到3.10,因此低于该版本的CMake无法执行构建任务
后面紧接着声明了项目名称,此时项目名称会被存储到PROJECT_NAME变量当中,如果当前是顶层的CMakeLists.txt,还会存储到CMAKE_PROJECT_NAME变量中
最后一句则是表示根据当前目录下的main.cpp源文件生成名为App的可执行文件

2.2、构建执行

理解了配置的含义,接下来开始正式进行项目的构建吧~~
首先,在当前目录创建一个build目录,之后构建的文件会放到这里面
image
然后打开终端,导航到build目录下
image
执行cmake ..,意思是对上级目录里的内容进行项目配置,生成一个本地的构建系统
image
此时,build目录下会多出一大堆东西
image
然后,是真正的构建环节,根据配置对项目进行编译链接,执行cmake --build .命令,基于当前目录生成的内容进行构建,并生成可执行文件
image
此时,可执行文件会出现在Debug目录下
image
执行App.exe,正是main.cpp里面我们编写的功能
image
此时,一个最小型的CMake项目就已经构建完成了

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

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

相关文章

[rCore学习笔记 018]实现特权级的切换

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 本节内容 因为risc-v存在硬件特权级机制,我们又要实现一个可以使得应用程序工作在用户级,使得操作系统工作在特权级.原因是要保证…

二分搜索

二分搜索 2024年7月25日 21:27正常二分思想 重点是遇到不同的数怎么定边界,怎么记录答案。 特殊情况:没有数字或者只有一个数,直接判断返回 先定一个ans=-1用于记录答案,l、r记录左右边界 看中点数值,比target小,说明比target的的数字在右边,l = mid+1 比target大,ans=…

博客园T恤 TALK IS CHEAP 系列新疆长绒棉款上架预售

这一款与第一款 TALK IS CHEAP 系列T恤用的是同样的设计,主要区别是面料不同,这款用的是新疆长绒棉,第一款用的是精梳棉,个人感觉新疆长绒棉跟舒适一些,另外版型稍有区别,这款衣长更长一些这一款与第一款 TALK IS CHEAP 系列T恤用的是同样的设计,主要区别是面料不同,这…

Easy521和Easy521的EIP通讯

1, 从站添加流程 2, 本机作为从站时的配置

如何选择合适的Bug跟踪软件?终极指南

国内外主流的10款BUG管理软件对比:PingCode、Worktile、禅道(ZenTao)、Bugzilla、Tapd、CODING、Teambition、Testin、Tower、乐道。在软件开发的世界里,管理和跟踪Bug是一个让许多开发者头疼的问题。选择一个合适的Bug管理工具不仅能提升开发效率,还能大大减少因错误管理…

CF613E Puzzle Lover 题解

Description 给定一个 \(2 \times n\) 的矩阵,每个位置上有一个小写字母。 有一个长度为 \(k\) 的小写字符串 \(w\),询问矩阵中有多少条有向路径满足以下条件:路径上的字母连起来恰好为 \(w\)。 不多次经过同一个位置。 只能向上下左右四个方向走。\(n,k \le 2 \times 10^3\…

2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。 然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。 要求找出最多可以选

2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。 然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。 要求找出最多可以选出的元素数量。 输入:nums = [2,1,5,1,1]。 输出:3。 解释:我们将下标 0 …

雷达气象学(4)——雷达参数和雷达气象方程

目录4.1 与脉冲相关的参数4.1.1 电磁波的波长4.1.2 脉冲重复频率(PRF)和脉冲重复周期(PRT)4.1.3 脉冲宽度和脉冲长度4.1.4 脉冲发射功率4.2 与天线相关的参数4.2.1 天线方向图和波束宽度4.2.2 天线增益4.3 雷达气象方程4.3.1 单个目标的雷达气象方程4.3.2 粒子群的雷达气象…

JavaWeb开发基础Servlet API

Servlet版本 Oracle将Java EE(Java SE还自己保留)交给开源组织,Eclipse基金会接手。但Oracle不允许开源组织使用Java名号,所以Jakarta EE名称于2018.02.26应运而生。 正是因为组织变化,Servlet被割裂为了2个版本,javax.servlet和jakarta.servlet。 javax.servlet已经停止…

利用Elasticsearch实现地理位置、城市搜索服务

最近用到一些简单的地理位置查询接口,基于当前定位获取用户所在位置信息(省市区),然后基于该信息查询当前区域的......提供服务。 然后就自己研究了下GIS,作为一个程序员。自己能不能实现这个功能呢?答案当然是可以。立即开干。 思路:找到数据,写入数据库,利用Elastic…

因子分析法————数据降维

因子分析法通过研究变量间的相关系数矩阵,把这些变量间错综复杂的关系归结成少数几个综合因子,起到了很好的降维作用 目录一、因子分析与主成分分析的对比1.原理对比2.作用区别二、因子分析的实例三、因子分析的理论介绍1.因子分析的模型2.模型假设3.因子载荷矩阵的统计意义(…

Python 实现行为驱动开发 (BDD) 自动化测试详解

​在当今的软件开发领域,行为驱动开发(Behavior Driven Development,BDD)作为一种新兴的测试方法,逐渐受到越来越多开发者的关注和青睐。Python作为一门功能强大且易于使用的编程语言,在实现BDD方面也有着独特的优势。那么,如何利用Python实现BDD自动化测试呢?本文将为…