linux下 Make 和 Makefile构建你的项目

Make 和 Makefile构建你的项目

介绍


在软件开发中,构建项目是一个必不可少的步骤。make 是一个强大的自动化构建工具,而 Makefilemake 工具使用的配置文件,用于描述项目的构建规则和依赖关系。本篇博客将介绍 makeMakefile 的基本概念以及如何使用它们来管理项目的构建过程。

1. 什么是 Make?

make 是一个命令行工具,用于根据 Makefile 文件中的规则来自动化构建项目。它通过检查文件的时间戳来确定文件之间的依赖关系,并只构建已经过期或被修改的文件,从而提高构建效率。

2. 什么是 Makefile?

Makefile 是一个文本文件,其中包含了一系列规则,用于描述项目中文件之间的依赖关系以及如何构建目标文件。每个规则由一个目标(target)、依赖项(dependencies)和构建命令(recipe)组成。

如何编写 Makefile?

一个简单的 Makefile 包含了一系列的规则。以下是一个简单的示例:

# 定义目标和依赖关系
target: dependency1 dependency2command1command2# 定义另一个目标another_target: another_dependencyanother_command

Makefile 示例

这个 Makefile 中的规则描述了项目中各个文件之间的依赖关系和如何构建目标文件。通过运行 make 命令,make 将会根据这些规则自动构建出可执行文件 main。如果要清理生成的文件,可以运行 make clear 命令。
在这里插入图片描述
这个 Makefile 简单的示例,用于说明如何编写一个能够编译多个源文件并链接成一个可执行文件的 Makefile。让我们逐行解释它:

main: main.o input.o calcu.ogcc -o main main.o input.o calcu.o
  • 这里我们定义了一个名为 main 的目标,它依赖于三个文件:main.oinput.ocalcu.o。如果其中任何一个依赖项的时间戳比 main 的时间戳更新,make 就会重新构建 main
main.o: main.cgcc -c main.c
  • 这一行定义了一个规则,告诉 make 如何生成 main.o。它表明 main.o 依赖于 main.c,如果 main.c 更新了,make 就会用 gcc -c 编译器选项来编译 main.c 生成 main.o
input.o:input.cgcc -c input.c
  • 这个规则告诉 make 如何生成 input.o。如果 input.c 更新了,make 就会用 gcc -c 编译器选项来编译 input.c 生成 input.o
calcu.o: calcu.cgcc -c calcu.c
  • 这个规则告诉 make 如何生成 calcu.o。如果 calcu.c 更新了,make 就会用 gcc -c 编译器选项来编译 calcu.c 生成 calcu.o
clear:rm *.orm main
  • 最后,我们定义了一个名为 clear 的目标,它没有依赖项。这个目标的作用是清理生成的文件,使用 rm 命令删除所有的 .o 目标文件和可执行文件 main

如何使用 make ?

1.在项目根目录下编写 Makefile 文件(方法如上)定义目标、依赖关系和构建命令。
在这里插入图片描述

2.在终端中运行 make 命令,make 会自动查找当前目录下的 Makefile 文件并执行其中的规则。
在这里插入图片描述

3.若要构建特定的目标,可以在命令行中指定目标名称,例如 make target_name
在这里插入图片描述

4.可以使用 make clean 命令清理生成的文件。
在这里插入图片描述

结语

通过本篇博客的介绍,你已经了解了 makeMakefile 的基本概念以及如何使用它们来管理项目的构建过程。makeMakefile 提供了一种简单而有效的方式来自动化项目的构建,提高了开发效率,并确保了项目的正确构建和更新。

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

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

相关文章

VS Code+Live Server插件开发游戏并结合内网穿透分享好友异地访问

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 前言 本篇教程,我们将通过VS Code实现远程开发MENJA小游戏,并通过cpolar内网穿透发布到公网,分…

《MySQL》超详细笔记

目录 基本知识 主流数据库 数据库基本概念 MySQL启动 数据库基本命令 数据库 启动数据库 显示数据库 创建数据库 删除数据库 使用数据库 查询当前数据库信息 显示数据库中的表 导入数据库脚本 表 查看表的结构 查看创建某个表的SQL语句 数据库的查询命令 查询…

Linux截图快捷键以及修改快捷键方式

1. 截图快捷键 初始快捷键如下 全屏截图并保存:AltPrint 选区截图并保存:ShiftPrint 全屏截图并复制到剪贴板:AltCtrlPrint 选区截图并复制到剪贴板:ShiftCtrlPrint 会保存到Pictures文件夹下面 2. 修改快捷键 打开Settings界面…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(二)

三、简配版集群,适用于demo环境 1.集群架构设计 主机名角色配置(核数,内存,磁盘)MasterRKE,controlplane,etcd,worker,rancher-master2C 8G 40GSlaver1controlplane,worker,rancher-master2C 8G 40GSlaver2controlplane,worker,rancher-mas…

电机控制系列模块解析(第五篇)—— FOC需要调节哪些参数

最近有上传一些入门的免积分的资料,方便大家上手进行仿真分析。注意查收。 继续回到咱们的电机控制系列模块解析(第五篇)—— FOC需要调节哪些参数,这些参数都是可以理论计算的,后续章节将介绍其如何计算。 一、快速…

[Python] 什么是KMeans聚类算法以及scikit-learn中的KMeans使用案例

什么是无监督学习? 无监督学习是机器学习中的一种方法,其主要目的是从无标签的数据集中发现隐藏的模式、结构或者规律。在无监督学习中,算法不依赖于任何先验的标签信息,而是根据数据本身的特征和规律进行学习和推断。无监督学习…

python_蓝桥杯刷题记录_笔记_全AC代码_入门3

前言 记录我的解法以及笔记思路,谢谢观看。 题单目录 1.P2141 [NOIP2014 普及组] 珠心算测验 2.P1567 统计天数 3.P1055 [NOIP2008 普及组] ISBN 号码 4.P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here 5.P1308 [NOIP2011 普及组] 统计单词数 6.P1047 […

不负书香,传承有我

随着科技的飞速发展,电子书、网络资源日益丰富,但实体书仍以其独特的魅力和不可替代性在每个人的生活中占据一席之地。为确保每一本书都能被正确、有序地摆放,为每一个读者提供便利,在2024年1月24日,曲阜师范大学计算机…

【数据分享】1929-2023年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 之前我们分享过1929-2023年全球气象站点的逐年平均气温数据、逐年最高气温数据…

AIGC技术讲解以及应用的落地

简介 近期,火爆的“AI绘画”、图片转AI图,智能聊天软件ChatGPT,引起了人们广泛关注。人工智能潜力再次被证明,而这三个概念均来自同一个领域:AIGC。AIGC到底是什么?为什么如此引人关注?AIGC能产…

ftrace工具学习笔记

ftrace是一个功能强大的Linux内核跟踪工具,可用于分析内核的行为和性能问题。它可以用来收集各种内核跟踪数据,如函数调用、内存分配、中断处理等。以下是ftrace的一些主要特点和用法: ftrace是内核自带的跟踪工具,因此无需安装。…

二叉搜索树题目:二叉搜索树的最近公共祖先

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:二叉搜索树的最近公共祖先 出处:235. 二叉搜索树的最近公共祖先 难度 3 级 题目描述 要求 给定一个…