Makfile总结在前面的三篇文章彻底掌握Makefile(一)、彻底掌握Makefile(二)和彻底掌握Makeifle(三)当中我们仔细介绍了Makefile各种使用方法,在本篇文章当中主要是对前面三篇关于makefile的文章做一个总结,方便大家快速查阅和检查 。
Makefile基础以及小技巧Make命令的工作流程当我们在命令行当中输入make
的时候他的执行流程如下:
- make命令首先会在当前目录下面寻找makefile或者Makefile文件 。
- 寻找到makefile文件之后,他会在文件当中寻找到一个编译目标,比如在上面的makefile文件当中他会找到
demo
这个编译目标,而不是clean
这个目标,因为clean
是第二个编译目标 。 - 然后make会解析编译目标的依赖,如果这个依赖是其他的编译目标A的话,那么make会先完成它依赖的编译目标A的命令,如果它依赖的编译目标A也存在依赖B的话,make就会去执行依赖的B的编译命令,如此的递归下去,知道有所得依赖目标都存在了,才会完成第一个编译目标的编译,这个也很好理解,只有依赖文件都存在了我们才能够完成正确的编译过程 。
- makefile基本规则
编译目标:依赖文件 编译命令
- 一个最基本的makefile
main: demo.o myprint.o gcc demo.o myprint.o -o out echo make 解析编译完成demo.o: demo.c gcc -c demo.c -o demo.omyprint.o: myprint.c gcc -c myprint.c -o myprint.oclean: rm myprint.o demo.o out
- 在makefile当中使用变量
cflags=-cmain: demo.o myprint.o gcc demo.o myprint.o -o outdemo.o: demo.c gcc $(cflags) demo.c -o demo.omyprint.o: myprint.c gcc $(cflags) myprint.c -o myprint.oclean: rm myprint.o demo.o out
- 在makefile当中使用include
include submakefiledemo.o: demo.c gcc $(cflags) demo.c -o demo.omyprint.o: myprint.c gcc $(cflags) myprint.c -o myprint.oclean: rm myprint.o demo.o out
- 在makefile当中使用PHONY
cflags=-cmain: demo.o myprint.o gcc demo.o myprint.o -o maindemo.o: demo.c gcc $(cflags) demo.c -o demo.omyprint.o: myprint.c gcc $(cflags) myprint.c -o myprint.oclean: rm myprint.o demo.o main.PHONY: clean # 增加这一行
- 在makefile当中使用通配符
cflags=-cmain: demo.o myprint.o gcc demo.o myprint.o -o main%.o: %.c gcc $(cflags) $<clean: rm myprint.o demo.o main.PHONY: clean
- 在makefile当中使用VPATH自动搜索
cflags=-cVPATH=./filesmain: demo.o myprint.o a.o b.o gcc demo.o myprint.o a.o b.o -o maindemo.o:demo.c gcc $(cflags) demo.c myprint.o:myprint.c gcc $(cflags) myprint.c a.o: a.c gcc $(cflags) $<b.o: b.c gcc $(cflags) $<clean: rm myprint.o demo.o main.PHONY: clean
- @符号
main: demo.c @echo hello world
- override覆盖命令行的赋值,让makefile文件当中的变量覆盖命令行当中的变量 。
cc=g++main: demo.c echo $(cc)ifeq ($(cc), gcc) echo $(cc) = 相等的语句执行了else echo $(cc) != 不相等的语句执行了endif
cc=g++main: demo.c echo $(cc)ifneq ($(cc), gcc) echo $(cc) != gccelse echo $(cc) = gccendif
ifdef 和 ifndef判断变量是否被定义或者为空foo = 1main: demo.c echo demoifdef foo echo define fooelse echo not define fooendif
main: demo.c echo demoifdef foo echo define fooelse echo not define fooendif
Makefile当中的函数在makefile当中除了能够使用条件表达式之外我们还可以使用函数,在makefile当中函数的使用规则如下:
经验总结扩展阅读
- DophineSheduler上下游任务之间动态传参案例及易错点总结
- JS 模块化-05 ES Module & 4 大规范总结
- 打麻将技巧与方法总结(打麻将10句口诀)
- Optional 常用方法总结
- 张艺凡 两个多月瘦了45斤总结的经验,10个小技巧让你瘦成“皮包骨”
- 穿衣搭配 从素人爸爸们身上,我总结了3个中年男性“去油法则”,效果惊人
- 穿衣搭配 从素人妈妈“听劝改造”上,总结4个中年女人变美技巧,效果惊人
- 饮食 瘦了64斤,总结的9个瘦子习惯,是时候在这个夏天瘦下来了
- 穿衣搭配 不节食,一个月能瘦15斤的经验总结
- 水果 瘦了47斤总结出来的减肥经验