Makefile2--初识Makefile结构

走进Makefile的世界【一】------Make 与 Makefile 前言: 本文章是我学习makefile做得笔记,学习途径【狄泰软件学院--唐老师门徒课程】。希望读者能与本人一起学习makefile知识,如有不懂的请于本人联系互相交流和学习及探讨,如写的有瑕疵也请多多包涵。互相学习,互相进步。          Q:whis is make? why need make? A:make 是一个应用程序。(1)解析源程序之间依赖关系 (2)根据依赖关系自 阅读详情

学习自狄泰软件学院唐佐临老师Makefile课程,文章中图片取自老师的PPT,仅用于个人笔记。


1 Makefile 依赖规则
2 试验1 验证依赖规则1:当目标对应的文件不存在时,执行命令
3 实验3 验证依赖规则2:当依赖在时间上比目标新时,执行对应命令
4 实验4 验证依赖规则1:当目标对应的文件不存在时,执行命令
5 实验5 工程开发中可以将最终的可执行文件名 和 all 同时作为 makefile 中第一条规则的目标

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实验1:

all : test
	@echo "make all" //不打印语句本身,只打印执行结果
	
test :   //没有依赖条件
	@echo "make test"


mhr@ubuntu:~/work/makefile1$ make
make test
make all
mhr@ubuntu:~/work/makefile1$ 

过程:
all 依赖于 test,所以要完成 all 这个目标,必须保证 test这个目标存在,并且完成后续的命令,test作为目标 ,但是当前文件下 test没有对应的文件存在,所以根据依赖规则,当目标对应的文件不存在时,test目标所对应的命令会被执行。

在这里插入图片描述

实验2

可执行程序 hello.out 依赖于 func.o main.o

all : func.o main.o
	gcc -o hello.out func.o main.o
	
func.o : func.c
	gcc -o func.o -c func.c
	
main.o : main.c
	gcc -o main.o -c main.c

func.c

#include "stdio.h"

void foo()
{
	printf("void foo() : hello makefile\n");
}

main.c

extern void foo();

int main()
{
	foo();
	
	return 0;
}	


 
mhr@ubuntu:~/work/makefile1$ make
gcc -o func.o -c func.c
gcc -o main.o -c main.c
gcc -o hello.out func.o main.o
mhr@ubuntu:~/work/makefile1$ ls hello.out
hello.out
mhr@ubuntu:~/work/makefile1$ ./hello.out 
void foo() : hello makefile
mhr@ubuntu:~/work/makefile1$ 

实验3

在实验2的基础上,略微修改 func.c,而main.c保持不变,再次执行 make

mhr@ubuntu:~/work/makefile1$ 
mhr@ubuntu:~/work/makefile1$ make
gcc -o func.o -c func.c
gcc -o hello.out func.o main.o
mhr@ubuntu:~/work/makefile1$ 

这里只执行了
func.o : func.c
gcc -o func.o -c func.c

并没有执行
main.o : main.c
gcc -o main.o -c main.c

是因为 根据依赖规则第二条:当依赖在时间上比目标新时,执行对应命令。此处的 func有的改动,状态是比上次生成的 func.o新的,所以会重新执行 gcc -o func.o -c func.c。

实验4
基于实验3,再次make 多次,发现每次都会之执行

all : func.o main.o
	gcc -o hello.out func.o main.o

这是为什么呢?明明 func.o main.o 两个依赖都没有更新变化,为什么还会反复执行呢,不合理且没必要重新链接产生 hello.out啊。这是因为 根据依赖规则第一条 最终目标all 没有对应一个 具体的文件,所以make认为 all所对应的 命令必须执行。

mhr@ubuntu:~/work/makefile1$ 
mhr@ubuntu:~/work/makefile1$ make
gcc -o hello.out func.o main.o
mhr@ubuntu:~/work/makefile1$ 
mhr@ubuntu:~/work/makefile1$ make
gcc -o hello.out func.o main.o
mhr@ubuntu:~/work/makefile1$ 
mhr@ubuntu:~/work/makefile1$ make
gcc -o hello.out func.o main.o
mhr@ubuntu:~/work/makefile1$ make
gcc -o hello.out func.o main.o
mhr@ubuntu:~/work/makefile1$ 

在这里插入图片描述

实验5:
处理实验四 任何依赖都没有发生更新变化 仍然执行命令的 问题
修改 Makefile

hello.out all : func.o main.o
	gcc -o hello.out func.o main.o
	
func.o : func.c
	gcc -o func.o -c func.c
	
main.o : main.c
	gcc -o main.o -c main.c

这样的好处就是,当任何依赖都没有发生变化更新的时候,make 的时候 就不会重新执行 gcc -o hello.out func.o main.o ,因为 make 已经发现了 最终目标 hello.out 在当前目录中存在对应的文件,所以又发现依赖没有变化 就不会命令了,当然 如果我们就是想重新执行 那么就执行 make all 依然会执行命令,原因如实验4所示。

mhr@ubuntu:~/work/makefile1$ 
mhr@ubuntu:~/work/makefile1$ make
make: 'hello.out' is up to date.
mhr@ubuntu:~/work/makefile1$ 
mhr@ubuntu:~/work/makefile1$ make all
gcc -o hello.out func.o main.o
mhr@ubuntu:~/work/makefile1$ 

在这里插入图片描述

教你玩转makeflie(一)make和makefile、初识 makefile 的结构 eg: 编译10000个源文件,第9999个,出错了,改好后重新编译,make自动跳过前9998个;注意:目标后的命令需要用Tab键('\t')隔开!否则报错。make -f mf.txt hello功能说明:以hello关键字作为目标查找mf.txt文件(-f 后),并执行hello处的命令。make hello功能说明:以hello关键字作为目标查找makefile或Makefile文件,并执行hello处的命令。make功能说明:查找makefile或Makefile文件中最顶层目标。并执行最顶层目标 阅读详情

相关推荐

狄泰软件学院makefile专题全部课件和代码

该资源是狄泰软件学院的门徒计划的make专题的全部课件和代码;该资源汇总了全部makefile知识点。对初学者很有帮助;值得大家好好学学!

Makefile9--函数定义及调用

学习自狄泰软件学院唐佐临老师Makefile课程,文章中图片取自老师的PPT,仅用于个人笔记。 /* $(0) : 代表 第0号参数 是 自定义函数名字 */ define func1 @echo "My name is $(0)," endif /* $(0) : 代表 第0号参数 是 自定义函数名字 $(1) : 代表 第1号参数 是 当前函数在调用的时候第一个实参的值 */...

奶牛养殖场小马 486

Materials Studio多层聚合物建模全流程:从Build Layers到LAMMPS data文件导出避坑指南

本文详细解析了使用Materials Studio构建多层聚合物模型并导出为LAMMPS data文件的全流程。重点剖析了Build Layers工具的核心逻辑、真空层处理技巧,并提供了解决导出过程中Z轴坐标偏移问题的实战方案,特别是如何利用msi2lmp工具的-shift参数进行精准校正,确保模型在LAMMPS中模拟的稳定性和准确性。

hhh00的博客 913

makefile学习笔记

文章目录函数wildcardnotdirpatsubst 函数 Makefile 里的函数跟它的变量很相似——使用的时候,你用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后用关括号结束。 wildcard 在 GNU Make 里有一个叫 ‘wildcard’ 的函 数,它有一个参数,功能是展开成一列所有符合由其参数描述的文 件名,文件间以空格间隔。你可以像下面所示使用这个命令...

diskman的博客 225

PCIE协议版--M.2接口规范V1.0中文版1——物理规格篇

5.1.3.双模块键模块:同时支持Socket1-DP、Socket1-SD。2.4.7.3.3.双面模块(使用H2.8、H3.2、H4.2连接器)6.5.8.2.5.热设计功率响应-带有风扇类别的薄平台笔记本电脑。2.3.7.1. Socket1&2射频连接器PIN-OUT。5.2.2.Socket2 PIN-OUT(机械KEY B)3.2.10.1.3.极薄的笔记本电脑的电源开关顺序的例子。5.1.1.Socket1-DP(机械KEY A)5.1.2.Socket1-SD(机械KEY E)

想你所想,做你所做 4679

科研ABC - The Results Section(SCI论文写作补充)

1 前言 1.1 IMRD格式 1.2 Results部分意义 1.3 Results部分主要内容 2 Results & Discussion关系 2.1 Results & Discussion部分的搭配方式 2.2 Results & Discussion部分的区分 3 Results部分的结构 3.1 Move 1: Set the Stage 3.1....

洋洋洋2020的blog 1619

Makefile13--自动生成依赖关系(下) include关键字暗黑操作

学习自狄泰软件学院唐佐临老师Makefile课程,文章中图片取自老师的PPT,仅用于个人笔记。 实验1 :成功创建了.dep文件,并且将各个.dep文件 放到 deps文件夹下,但是 func.dep文件被重复创建 实验2 :修正 func.dep 文件被重复创建 实验3 :进一步优化,如果是 make clean 不包含 include关键字后面的内容进来。 实验4 include黑暗操作1...

奶牛养殖场小马 495

攻防世界 misc题GFSJ1129-【您看我还有机会吗?】

我们发现了隐藏内容,一开始我以为那个英文就是flag,提交后发现不对,然后我想只有一张图片然后图片上的隐写内容又不是flag,那必定还有什么文件被隐藏了,于是我们打开VMware并启动Ubuntu,使用binwalk分析一下有没有隐藏文件,我们要在Terminal中分析,如下。我们发现里面有一个flag.txt文件,我们尝试提取里面内容,但发现又要密码,我们想起了之前图片上的隐藏内容,我们将那段英文输入(包括空格和符号,在VMware中输入密码不会有显示,你看到的就像没输入一样),然后我们看到如下。

大数据专业,关注 AI 安全与数学建模。记录 Web 安全、对抗攻击、隐私保护等安全实践,以及从经典模型到智能方法的建模思考。用数学思维理解 AI,用 AI 方法反哺安全与建模。 1094

2.初识makefile结构

目录 1.makefile的意义 2.依赖定义 3.规则中的注意事项 4.第一个make的编译案例 5.小技巧 6.初探make编译 7.小结 1.makefile的意义 makefile用于定义源文件的依赖关系 makefile说明如何编译各个源文件并生成可执行文件 2.依赖定义 targets:prerequisites;command1 command2 ...

qq_34738528的博客 341

【PINN高级教程】范式融合与前沿应用 第5讲:贝叶斯推断与生成式建模的深度融合

正规化流(Normalizing Flow, NF)通过一系列可逆变换把简单分布映射为复杂后验,从而获得更好的表达能力。算子学习保持映射的物理正确性。贝叶斯推断给出了自然的框架,但直接对高维函数空间做采样(如 MCMC)几乎不可行。1️⃣ 在自己的 PDE 上跑一遍完整的 Bayesian PINN 流模型。的学习机制深度融合,以在保持物理一致性的前提下,高效地从后验分布中采样。2️⃣ 将每个 θ 直接映射到 FNO 权重,得到不同解的采样。的后验 p(θ∣x,y)p(θ∣x,y) 进行近似。

u012133341的博客 474

uniapp [全端兼容] - 最新详细实现拍摄视频录像并可播放预览视频,调起本机摄像头开启录像录制完毕后保存到本机临时存放,可对拍摄的视频进行压缩处理减少文件大小不损失画质,详解录制视频并读取播放!

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,录视频,拍视频,拍摄录制视频后上传服务器,调起摄像头录视频并可预览,录视频上传,录像,uniapp录制视频并上传,录制视频并保存到本地设备,如何本地保存并播放预览,提供给用户观看MP4视频录像并上传到后端服务器完整功能源码,视频压缩,mp4文件,删除视频,录像后怎么预览,临时视频文件怎么减少压缩大小,视频压缩及上传,自己录视频并生成可播放的文件,录视频并能打开查看,视频压缩后上传,本机相册,录完怎么预

🏆 前端领域优质创作者 1万+

【makefile学习记录2】初识makefile结构

1、makefile的意义及定义:用于定义源文件间的依赖关系(通过自己特定的语法),通过这种依赖关系来说明如何编译各个源文件并生成可执行文件。依赖的定义:(①定义依赖规则时,依赖条件可以省略②可以把command1不用,此时分号可去掉)targets : prerequisite ; command1 '\t' command2makefile中的元素含义: targets:    通常是需要生成...

haibing_x的博客 214

Multisim14.0仿真应用设计(十六)74LS138译码器应用仿真

74LS138为3线-8线译码器。

zhusl6688的博客 2981

第2课 - 初识makefile的结构

1. makefile 的意义 (1)makefile 用于定义源文件之间的依赖关系(在阅读开源软件源码时,可通过makefile掌握源码中各个文件之间的关系) (2)makefile 说明如何编译各个源文件并生成可执行程序。      2. makefile 的规则 (1)makefile 规则的定义     形式1:targets:prerequisites;command    ...

梦心之魂的博客 90

【软考高级系统架构论文】论微服务架构及其应用

本文围绕“论微服务架构及其应用”展开论述。首先概要介绍了本人参与的某公司线上电子商务平台项目,在其中担任系统架构设计师。接着分析了微服务架构相较于单块架构的特点,如模块化与组件化、技术栈多样性、独立部署与扩展、高度容错与可用性等。最后结合项目阐述了软件架构对微服务模式的采用情况,以及实施过程中遇到的问题及解决方案,如服务划分粒度、数据一致性、监控与故障排查等问题,并给出了相应解决办法。

qq837993702的博客 225

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

2-初识makefile的结构

1、makefile的意义2、makefile中的元素含义3、规则中的注意事项4、示例5、依赖规则6、例子7、小技巧 执行make的时候可以监测hello.out是否有改变过8、小结

大家好,我姓郑,就是那个被鲁智深三拳打死的那个屠夫的郑~_~~_~ 295

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Makefile由浅入深完全学习记录2】初识 makefile 的结构

继续学习makefile,希望尽快掌握makefile好在面试中更好的掌握方向!加qq1126137994一起学习更多技术!! 1、回顾 makefile的意义: makefile用于定义源文件之间的依赖关系 makefile说明如何编译各个源文件并生成可执行文件 依赖的定义: ‘\t’ 代表的是tab键! makefile中各元素的意义: -targets: 通...

厚积薄发 1216

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

第二课:初识makefile的结构

初识makefile的结构 makefile的意义 makefile用于定于源文件之间的依赖关系 makefile说明如何编译各个源文件并生成可执行文件 # 一个最基本的依赖的规则如下: target : prerequisites ; command1 '\t'command2 makefile中的元素含义 targets 通常是需要生成的目标文件名 make所需执行的命令名称(例如:all) prerequisities 当前目标所依赖的其他目标或者文件 command 完

T1mzhou的博客 360

初识makefile的结构

makefile 的意义 makefile 用于定义源文件之间的依赖关系 makefile 用于说明如何编译各个源文件并生成可执行文件 依赖的定义: targets : prerequisites ; command1 '\t' command2 makefile 中元素的意义 targets 通常是需要生成的目标文件名 make 所需执行的命令名称 prerequisites 当前文件所依赖的其他目标或文件 command 完成目标所需要执行的命令 规则中的注意事项

qq_52484093的博客 1121

贰 -《初识 makefile 的结构》

初识 makefile 的结构 makefile 的意义 makefile 用于定义源文件建的依赖关系 makefile 说明如何编译各个源文件并生成可执行文件 依赖的定义: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ve5SrZvw-1596850258615)(F4CC6BF29FB44DB79B769B9A243E2750)] makefile 中的元素含义 targets 通常是需要生成的目标文件名 make 所需要执行的命令名称 prerequisi

zhabin0607的博客 160

Makefile初识与探索

简易理解是一种脚本语言,像shell脚本一样,需要有解释器(make)。 虽说Makefile是脚本语言,学习的时候也应当按正常编程语言来学习,也是有变量,符号,语句,函数。

u013391407的专栏 2529

初识Makefile

makefile 是个文件,这个文件中描述了程序的编译规则执行 make 命令的时候,make 命令会在当前目录下找 makefile 文件, 根据 makefile 文件里的规则,编译 程序Makefile规则文件是 程序员根据自己的程序,编写的编译规则1、GNU make 是一种代码维护工具2、make 工具会根据 makefile 文件定义的规则和步骤,完成整个软件项目的代码维护工作。3、一般用来简化编译工作,可以极大地提高软件开发的效率。4、windows下一般由集成开发环境自动生成。

qaxzy的博客 1014
上一篇: Makefile1-- make 与 makefile
下一篇: C基础第10课 struct 和 union 分析
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值