makefile的结构和伪目标的引入

1.makefile的意义
makefile用于定义源文件间的依赖关系
makefile说明如何编译各个源文件并生成可执行文件
在这里插入图片描述makefile中的元素含义:
targets:(可以包含多个目标,使用空格对多个目标名进行分隔)
通常是需要生成的目标文件名
make所需执行的命令名称
prerequisities:(可以包含多个依赖,使用空格对多个依赖进行分隔)
当前目标所依赖的其他目标或文件
command:
完成目标所需执行的命令

**规则中的注意事项:**
Tab键:'\t'
	每一个命令行必须以Tab字符开始
	Tab字符告诉make此行是一个命令行
续航符:\
	可以将内容分开写到下一行,提高可读性

一个makefile的依赖示例:

all:test
	echo "make all"
test:
	echo "make test"

依赖规则:
当目标对应的文件不存在,执行对应命令
当依赖在时间上比目标更新,执行对应命令
当依赖关系连续发生时,对比依赖链上每一个目标

注意:makefile中可以在命令前加上@符,作用为命令无回显

2.第一个make的编译案例

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

小技巧:
工程开发中可以将最终可执行文件名和all同时作为makefile中第一条规则的目标

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

小结:
依赖存在并且命令执行成功是目标完成的充要条件

3.伪目标的引入
默认情况下:
make认为目标对应着一个文件
make比较目标文件和依赖文件的新旧关系,决定是否执行命令
make以文件处理作为第一优先级

下面的代码什么意义?

clean:
	rm *.o hello.out

make clean

makefile中的伪目标:
通过**.PHONY关键字声明一个伪目标
伪目标
不对应任何实际的文件**
不管伪目标的依赖是否更新,命令总是执行

伪目标的语法:先声明,后使用
本质:
伪目标是make中特殊目标.PHONY的依赖

.PHONY:clean
##注释##
clean:
	rm *.o hello.out

4.伪目标的妙用:规则调用(函数调用)

.PHONY:clean rebuild all
##other rules##
rebuild:clean all //先清除再编译
all:hello.out
clean:
	rm *.o hello.out

原理:当一个目标的依赖包含伪目标时,伪目标所定义的命令总是会被执行。

技巧:绕开.PHONY关键字定义伪目标
原理:
如果一个规则没有命令或者依赖,并且它的目标不是一个存在的文件名;在执行此规则时,目标总会被认为是最新的。

clean:FORCE
	rm *.o hello.out
FORCE:  //目标总会被认为是最新的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值