makefile

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

makefile项目管理工具
命名:makefile	 Makefile  --- make 命令

作用:
	1.项目编译管理
	2.提高编译效率
	3.降低编译出错概率
	
工作原理:
	1.欲生成目标,检查规则中依赖条件是否存在。不存在寻找新规则来生成该依赖
	2.欲更新目标,须先检查其所有依赖。依赖中有任一个被更新,则目标必须更新

一、makefile基础规则:

	目标:依赖条件
	(tab)命令
	如:add.o:add.c
			gcc –Wall –g –c add.c –o add.o
	
	1.目标的时间必须晚于依赖条件的时间,否则,更新目标
	2.依赖条件如果不存在,找寻新的规则去产生依赖条件。
	ALL:指定makefile的终极目标。

二、makefile两个函数和clean:

	src = $(wil1dcard . *.c)
	匹配当前工作目录下的所有.c文件。将文件名组成列表,赋值给变量src。假如该目录下有add.c sub.c div.c这几个.c文件,那么src = add.c sub.c div.c。
	
	obj = $(patsubst  %.c,%.o,$(src))
	将参数3中,包含参数1的部分,替换为参数2。obj = add.o sub.o div1.o
	
	c1ean:(没有依赖)
	-rm -rf $(obj) a.out	
	rm前面的“-”作用是删除不存在文件时不报错,顺序执行结束。
	假如待删除文件集合是5个,已经手动删除了1个,就只剩下4个,然而删除命令里面还是5个的集合,就会有删除不存在文件的问题,不加这-,就会报错,告诉你有一个文件找不到。加了-就不会因为这个报错。

三、makefile变量、3个自动变量、模式规则:

	变量定义及使用:
		foo=abc   		#变量定义直接用'=',’=‘两边不能有空格
		bar=$(foo) 	 	#使用变量值用$(变量名)
		
	3个自动变量
		$@:在规则的命令中,表示规则中的目标。
		$<:在规则的命令中,表示第一个依赖条件,如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则。
		$^:在规则的命令中,表示所有依赖条件,组成一个列表,以空格隔开,如果这个列表中有重复项,则去重。
		
	模式规则:
		模式规则是一种通用的规则,可以匹配多个文件。它的语法为:
		%.o:%.c
			gcc -c $< -o $@
		它告诉make工具如何将所有以.c为扩展名的源文件编译成以.o为扩展名的目标文件。
		%.o: %.c 表示所有以.c为扩展名的文件(比如a.c、b.c、c.c等)对应的目标文件是以.o为扩展名的文件(a.o、b.o、c.o等)。
		gcc -c $< -o $@ 表示了生成目标文件的命令。其中,<表示依赖文件列表中的第一个文件(即.c文件),@ 表示目标文件(即.o文件)。这个命令告诉make工具使用gcc编译器将.c文件编译成.o文件。
		注意:只有写成模式规则的时候,$<才表示了所有依赖条件的依次取值,否则只是取依赖条件中的第一个。
	
	静态模式规则:
		静态模式规则是一种更加特定的规则,可以匹配指定的文件列表。它的语法为:
		$(obj):%.o:%.c
			gcc -c $<-o %@
		静态模式规则是用来指定该模式规则是用来生成某一个obj的,也就是指定模式规则给谁用,以后文件多了,文件集合会有很多个,就需要指定哪个文件集合用什么规则。

	伪目标:
		.PHONY : clean ALL
		声明伪目标clean和ALL。why?
		当前文件夹下有ALL文件或者clean文件时,会导致makefile瘫痪,用伪目标来解决,添加一行  .PHONY: clean ALL
		如下图所示:

在这里插入图片描述

	再来执行make clean,就不会受到干扰了。
		还有一个扩展就是,编译时的参数,-g,-Wall这些,可以放在makefile里面
	修改后makefile如下:

在这里插入图片描述

总结:

	模式规则:%.o:%.c
		’%‘表示一个或多个,在依赖条件中同样可以使用’%‘,依赖条件中的’%’的取值,取决于其目标。
	自动变量:gcc -c $< -o $@
		只有写成模式规则的时候,$<才表示了所有依赖条件的依次取值,否则只是取依赖条件中的第一个。
		add.o:add.c
		gcc -c $< -o $@
		sub.o: sub.c
		gcc -c $< -o $@
		sub,add这些指令中使用$<和$^都能达到效果,但是为了模式规则,所以使用的$<
		修改一下就成为了:
		%.o:%.c
		gcc -c $< -o $@
		

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值