Cmake中 makefiles 的作用

背景

传统意义上的 Makefiles 是用于自动化构建过程的文件,主要在 Unix-like 系统(如 Linux 和 macOS)上使用。Makefiles 定义了如何编译和链接程序,包括编译指令、源文件、目标文件、依赖关系和最终的可执行文件。Makefiles 是由 make 工具使用的,make 是一个构建自动化工具,用来控制和自动化编译过程。

为什么说传统意义上的 Makefiles 呢?
因为有专门为 Windows 或 Visual Studio 环境设计的 Makefiles,
命令为: cmake -G "Visual Studio 16 2019" -A x64
这里的 “Visual Studio 16 2019” 是生成器名称,表示你要生成 Visual Studio 2019 的项目文件。-A x64 是指定目标架构为 64 位。当然,你应该根据你安装的 Visual Studio 版本来调整生成器的名称。例如,如果你使用的是 Visual Studio 2022,你应该使用 “Visual Studio 17 2022” 作为生成器。

通过这种方式生成的项目文件可以直接在 Visual Studio 中打开,你可以利用 Visual Studio 的各种功能,如调试、代码编辑和项目管理等。

Makefiles 作用

Makefiles 用来描述如何编译和链接一个程序。简单地说,它告诉计算机如何从源代码文件(如 .cpp 文件)生成可执行文件。

Makefiles 的组成

一个 Makefile 主要由三部分组成:

  • 目标(Targets):通常是你想生成的文件,比如可执行文件或对象文件。目标后面跟着冒号。
  • 依赖(Dependencies):这些是构建目标所必需的文件,如源代码或其他目标。它们写在目标的后面,用空格隔开。
  • 规则(Rules):在新行中,用一个制表符(Tab)开始,这些是实际的命令,用来生成目标。

示例解释
让我们通过一个例子来更清楚地理解:

# 这是一个注释# 目标:可执行文件 'program'
program: main.o utils.og++ -o program main.o utils.o  # 这一行是编译命令,用来链接对象文件生成可执行文件# 目标:对象文件 'main.o'
main.o: main.cppg++ -c main.cpp  # 这一行是编译命令,用来把 'main.cpp' 编译成 'main.o'# 目标:对象文件 'utils.o'
utils.o: utils.cppg++ -c utils.cpp  # 这一行是编译命令,用来把 'utils.cpp' 编译成 'utils.o'

在这个 Makefile 中:

  • 目标 program 依赖于 main.o 和 utils.o。
  • 命令 g++ -o program main.o utils.o 用于链接 main.o 和 utils.o 来创建 program(可执行文件)。
  • 目标 main.o 依赖于 main.cpp,而命令 g++ -c main.cpp 将 main.cpp 编译成对象文件 main.o。
  • 同理,utils.o 依赖于 utils.cpp,命令 g++ -c utils.cpp 将 utils.cpp 编译成对象文件 utils.o。

使用 Makefile

当你在命令行中输入 make 并按回车时,make 程序会查找名为 “Makefile” 的文件,并尝试执行它定义的第一个目标(在这个例子中是 program)。make 会检查所有的依赖项(如 .o 文件和 .cpp 文件),只重新编译那些自上次编译后已经被修改的文件,这样可以节省时间。

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

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

相关文章

EXCEL数据快速上传至SAP透明表

文章目录 前言一、案例介绍/笔者需求二、备份数据三、数据处理转化 a.EXCEL转为TXT注意事项 b.EXCEL转为TXT 四、ABAP结合内表更新数据至透明表 a.代码实现 b.断点TXT上传至内表 c.查看上传结果 五、总结 前言 这篇文章…

如何从多个文件夹内转移全部文件(忽略文件夹的结构)(进行复制)(再打包)

首先,需要用到的这个工具: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 04文件夹里面有只有1个名称为"1"的文件夹,“1”里面有“2”,“2”有“3”,“3”有“4”,从“1”开…

暴力破解【1】

1.c/s架构暴力破解 1.1 c/s架构暴力破解前提条件 知道目标地址,端口,协议,无后端验证、用户名字典、密码字典 1.2 c/s架构暴力破解工具 hydra、bruter、medusa爆破 2.b/s架构暴力破解 2.1 无验证码绕过 不带验证码无测试次数的直接使…

VUE el-button指定图片背景

似乎只能通过css指定&#xff1f; 代码1 <el-button circleclass"stream0"click"switchToStream(0)" > </el-button> 代码2 <style>.stream0 {background-size: cover;background-image: url(~/assets/stream.png); } 如果要动态变…

QT 客户端软件开发

QT 是一种功能强大且灵活的跨平台应用程序开发框架&#xff0c;但也存在一些技术难点&#xff0c;需要开发者仔细考虑和克服。以下是一些常见的 QT 软件开发的技术难点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 跨平台兼容性…

如何优雅的实现浏览器多标签通讯

前言 开发过程中无法避免遇到需要进行多标签通讯的情况&#xff0c;例如&#xff1a; 管理员登陆后&#xff0c;其他打开标签的页面登陆状态要变更课堂页面只能打开一个&#xff0c;另一个则通知失效等等。。。场景 然而实现该功能&#xff0c;我们需要使用页面能共同持有的…

低价监测如何保证准确率

品牌做低价监测的目的&#xff0c;是为了管控渠道中的低价链接&#xff0c;最终是使这些低价不再影响渠道&#xff0c;使他们下架或者改价链接&#xff0c;所以监测结果的准确性&#xff0c;是会影响最终的治理范围和治理结果的&#xff0c;这就需要做到百分百的准确监测&#…

Volatile内存语义深度剖析:原理与实现机制

引言 内存模型是计算机领域中一个至关重要的概念&#xff0c;它涉及到程序如何在多个线程之间共享和访问数据。在多线程编程中&#xff0c;正确理解内存模型对于避免出现诸如数据竞争、死锁等问题至关重要。而volatile关键字则是Java语言中用来解决部分多线程并发访问问题的重…

通过 Java 操作 redis -- set 集合基本命令

关于 redis set 集合类型的相关命令推荐看Redis - Set 集合 要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff0c;推荐看通过 Java 操作 redis -- 连接 redis 本博客只介绍了一小部分常用的命令&#xff0c;其他的命令根据上面推荐的博客也能很简单的使…

详细解读性能测试指标(性能指标、CPU、内存、负载、磁盘)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 性能测试指标是衡量系统性能的评价标准&#xff0c;常用的系统性…

USB系列一:USB技术概念

在这里USB的历史就不赘述了&#xff0c;有兴趣可以自己去搜索。也省略掉USB接口的概述&#xff0c;这些都是一些飞技术性的常识性的知识&#xff0c;没必要浪费篇幅和文字来描述。 一、USB总线版本&#xff1a;&#xff08;从USB1.1说起&#xff09; 1、USB1.1 1998年9月23日…

使用Vue连接Mqtt实现主题的订阅及消息发布

效果如下&#xff1a; 直接贴代码&#xff0c;本地创建一个html文件将以下内容贴入即可 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …

深度学习论文: SuperPoint: Self-Supervised Interest Point Detection and Description

深度学习论文: SuperPoint: Self-Supervised Interest Point Detection and Description SuperPoint: Self-Supervised Interest Point Detection and Description PDF: https://arxiv.org/pdf/1712.07629 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代…

【话题】如何看待AI技术,以及AI技术的发展现状和未来趋势

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 背景一、引言二、AIGC技术的发展现状2.1、技术突破与成果2.2、应用领域的拓展2.3、市场规模的增长 三、AIGC技术的未来趋势3.1、技术融合与创新3.2、应用领域的深化3.3、…

FlatBuffers 与 ProtocolBuffers 的区别

背景 FlatBuffers 和 Protocol Buffers&#xff08;通常简称 Protobuf&#xff09;都是由 Google 开发的序列化协议&#xff0c;用于在不同的程序或网络间有效地传输和存储结构化数据。尽管它们的目标相似&#xff0c;但在设计和使用上有一些关键的区别。 FlatBuffers 直接访…

绿盟之旅——一段安全实习结束

去年&#xff0c;因为着急找实习&#xff0c;拿着简历就开始海投&#xff0c;当时想的是有人让我去就谢天谢地了&#xff0c;第一个约我面试的就是绿盟&#xff0c;也很顺利的通过了面试&#xff0c;当时让我选择在上海还是北京&#xff0c;我选择的是上海&#xff0c;因为学校…

不要和别人比,要和自己的过去比!才会有进步!

现在的人都喜欢拿自己去和别人比较&#xff0c;当然是和比你混得好的人比&#xff0c;比你弱的你也不会去比。比如这个朋友又换了一辆车&#xff0c;那个朋友又买了一套房&#xff0c;另一个朋友又加薪了等等&#xff0c;比来比去总觉得比不上别人。这样比较对自己很不好&#…

Python脚本批量造数据、跑定时任务协助测试

批量造数据 连接Mysql的信息 1 import pymysql 2 # 数据库连接信息 3 # 多个库要有多个conn 4 conn pymysql.connect( 5 host"主机", 6 user"用户名", 7 password"密码", 8 database"库名" 9 ) 10 conn1 pymysql.connect(…

warning: in the working copy of ‘wxss/8.wxss‘, LF will be replaced by

git add --renormalize . git commit -m "Normalize line endings"

【组合数学】2842. 统计一个字符串的 k 子序列美丽值最大的数目

本文涉及知识点 组合数学汇总 LeetCode 2842. 统计一个字符串的 k 子序列美丽值最大的数目 给你一个字符串 s 和一个整数 k 。 k 子序列指的是 s 的一个长度为 k 的 子序列 &#xff0c;且所有字符都是 唯一 的&#xff0c;也就是说每个字符在子序列里只出现过一次。 定义 f…