【Linux】项目自动化构建工具——make/Makefile
创始人
2024-05-28 11:34:28
0

目录

1.make与Makefile的关系

Makefile

make

项目清理

clean

.PHONY 


当我们编写一个较大的软件项目时,通常需要将多个源文件编译成可执行程序或库文件。为了简化这个过程,我们可以使用 make 工具和 Makefile 文件。Makefile 文件可以帮助我们自动化构建和管理软件项目,从而提高效率和可靠性。它还可以跨平台使用,因为 make 工具可以在各种不同的操作系统和编译器上运行。

1.make与Makefile的关系

Makefile

Makefile 文件包含了一系列规则,每个规则描述了如何从源文件生成目标文件。在每个规则中,我们定义了目标文件和其依赖关系,并且指定了需要执行的命令。

示例:

创建一个新文件 Makefile;

touch Makefile

编辑 Makefile 文件;

//vim进行编辑
vim Makefile
//写入内容
Test : Test.cgcc Test.c -o Test
//保存退出

这样就写好了一个 Makefile 文件 了,那么这样写有什么含义呢?

其实每个 Makefile 文件存在的意义就是生成一个最终目标文件,而 Makefile 文件里最开始的文件就被认定为是最终目标文件(示例中的Test文件)。

示例中,要想生成目标文件 Test ,我们需要通过 Test.c 文件经过编译后生成目标文件 Test。所以Test.c 与 Test 产生了依赖关系,用 :表示。而接下来的  gcc Test.c -o Test 这条指令就是解释生成目标文件 Test 需要和 test.c 产生怎样的关系。

当然依赖关系有时候也可以不存在。因为 make 的目的是产生目标文件,不用管通过什么手段,也不管有没有目标文件,例如:

//没有依赖关系的示例
Test : touch Test

有的时候,一个依赖关系可能不足以生成最终目标文件,此时我们还需建立多层依赖关系,例如:

Test : test.ogcc test.o -o Test 
test.o : test.sgcc -c test.s -o test.o
test.s : test.igcc -S test.i -o test.s
test.i : Test.cgcc -E Test.c -o test.i 

为了生成最终的目标文件 Test ,系统会根据依赖关系一层一层的寻找下去。如上例,要生成Test,就得找到 test.o,要生成 test.o 就要生成 test.s...,在这样一层一层的寻找的时候,如果有哪个过程中出现了断层(生成目标文件失败),则会出现报错。

上个示例结果如下,make 指令执行 Makefile 后,不仅最终目标文件生成了,过程中的目标文件也都会生成:

明白了Makefile是什么之后,再来看一看make指令。

make

make是一条指令,它与Makefile相伴相生。

当我们执行 make 命令时,make 工具会读取 Makefile 文件,并根据其中的规则来生成目标文件。它会检查每个规则中的依赖关系和目标文件的最新修改时间,从而决定哪些规则需要执行。

通俗讲就是,系统为了效率,并不会对已经生成的目标文件且未曾改动的目标文件再作复杂的编译后重新生成。

它会检查目标文件的最后一次更新的时间,如果发现这个时间发生在上次生成该文件之后,则说明该文件被修改过,需要重新编译;反之则无需再重新编译。

当我们只输入 make 指令时,它会默认最终目标文件。倘若我们只是想生成过程中的某一个目标文件,则需要指定该文件名。例如:只需生成 test.o 即可:

Test : test.ogcc test.o -o Test 
test.o : test.sgcc -c test.s -o test.o
test.s : test.igcc -S test.i -o test.s
test.i : Test.cgcc -E Test.c -o test.i 
make test.o

 结果如下:

项目清理

clean

在 Makefile 中,一般还会加入一个目标文件 clean 且用 .PHONY 修饰 ,其作用是清理生成项目文件。例如:

Test : test.ogcc test.o -o Test 
test.o : test.sgcc -c test.s -o test.o
test.s : test.igcc -S test.i -o test.s
test.i : Test.cgcc -E Test.c -o test.i.PHONY : clean 
clean : rm -f Test test.i test.s test.o  

.PHONY 

被 .PHONY 修饰的目标文件意为 总是被执行的。例如,我们执行 make test.o 命令后,可以执行,但是第二次却不行了,因为该目标文件已经存在且为最新。但是被 .PHONY 饰后可以一直被执行。

 

 

相关内容

热门资讯

最新半台词分享 最新三句半台词分享  俺们几个话挺多,大家不要嫌罗嗦,希望能够捧捧场,鼓掌!  北京先把地方占,天津...
《教父》经典台词中英文对照 《教父》经典台词中英文对照  1、To be close to your friend, but c...
播音主持稿 播音主持稿(精选21篇)  在现在的社会生活中,我们很多时候都不得不用到主持稿,主持稿是主持人为把整...
年会主持词 精选年会主持词四篇  主持词要注意活动对象,针对活动对象写相应的主持词。在现今人们越来越重视活动氛围...
金秋国庆主持词开场白 金秋国庆主持词开场白  国庆节是我们祖国母亲的生日,下面unjs小编整理了金秋国庆主持词开场白,欢迎...
金榜题名升学宴主持词 金榜题名升学宴主持词  金榜题名升学宴主持词开场白(一)  大家中午好!  在这鸟语花香、绿意盎然的...
春节晚会主持词串词 春节晚会主持词串词(精选10篇)  在人们积极参与各种活动的今天,我们越来越需要串词,有的时候,涉及...
高考动员大会主持词 高考动员大会主持词  同学们:  大家早上好!  xxxx年高考就要拉开帷幕,可谓弓已经在弦,剑已经...
职工代表大会会议主持词 职工代表大会会议主持词  职工代表大会是职工群众当家作主,参加企业经营决策、管理、监督干部、行使民主...
运动会闭幕式的主持词 运动会闭幕式的主持词(精选5篇)  主持词是主持人在节目进行过程中用于串联节目的串联词。在当今社会中...
德芙橱窗篇广告 德芙橱窗篇广告德芙橱窗篇广告评论整个广告的广告词只有简简单单的“德芙,此刻尽丝滑”,却给人很深刻的印...
《老友记》中超中英文对照经典... 《老友记》中超实用的中英文对照经典台词  《老友记》可以说是最风靡中国的`一部学习美语的剧集了。这几...
员工生日主持词 员工生日主持词3篇  篇一:公司员工集体生日晚会主持词主持人开场白:(背景音乐:激动人心)  各位领...
三八主持词开场白 三八主持词开场白  在现实社会中,很多时候,我们都不可避免的需要用到开场白,独具匠心的开场白,才能给...
篮球比赛主持人串词 篮球比赛主持人串词时 间:---地 点:----主持人:----尊敬的各位领导、各位嘉宾、同学们,大...
六一文艺汇演活动小主持人台词 六一文艺汇演活动小主持人台词尊敬的各位领导.各位老师.各位家长.亲爱的小朋友们:  大家上午好!您现...
金榜题名庆典主持词 金榜题名庆典主持词  主持词需要富有情感,充满热情,才能有效地吸引到观众。在当今中国社会,司仪等是很...
辩论赛主持稿 辩论赛主持稿(4篇)  一场精彩的辩论赛不能少的就是我们的主持人以及他的主持稿了,这个主持稿大家准备...
半搞笑开场白 三句半搞笑开场白三句半搞笑开场白元旦三句半台词贺新年三句半台词辞旧迎新又一年,敲锣打鼓恁别嫌,先给大...
最新年会主持稿 最新年会主持稿10篇  一个年会最重要的便是主持人的主持稿了,下面请看小编带来的年会主持稿!欢迎大家...