Makefile 假想目标:.PHONY

假想目标: .PHONY


test: a.o b.o c.o
	gcc -o test $^

%.o : %.c
	gcc -c -o $@ $<

clean:
	rm *.o test

.PHONY: clean


1.我们想清除文件,我们在Makefile的结尾添加如下代码就可以了:

clean:
	rm *.o test

1).执行make:生成第一个可执行文件。

2).执行make clean: 清除所有文件,即执行:rm *.o test。

make后面可以带上目标名,也可以不带,如果不带目标名的话它就想生成第一个规则里面的第一个目标。


2.使用Makefile

执行:make [目标]

也可以不跟目标名,若无目标默认第一个目标。我们直接执行make的时候,会在makefile里面找到第一个目标然后执行下面的指令生成第一个目标。当我们执行make clean的时候,就会在Makefile里面找到clean这个目标,然后执行里面的命令,这个写法有些问题,原因是我们的目录里面没有clean这个文件,这个规则执行的条件成立,他就会执行下面的命令来删除文件。

如果:该目录下面有名为clean文件怎么办呢?

我们在该目录下创建一个名为“clean”的文件,然后重新执行:make然后make clean,结果(会有下面的提示:):

make: `clean' is up to date.

它根本没有执行我们的删除操作,这是为什么呢?

我们之前说,一个规则能过执行的条件:1),目标文件不错在2),依赖文件比目标新。现在我们的目录里面有名为“clean”的文件,目标文件是有的,并且没有依赖文件,没有办法判断依赖文件的时间。这种写法会导致:有同名的"clean"文件时,就没有办法执行make clean操作。解决办法:我们需要把目标定义为假象目标,用关键字PHONY。

.PHONY: clean	  //把clean定义为假象目标。他就不会判断名为“clean”的文件是否存在,

然后在Makfile结尾添加.PHONY: clean语句,重新执行:make clean,就会执行删除操作。


http://wiki.100ask.org/index.php?title=%E7%AC%AC009%E8%AF%BE_gcc%E5%92%8Carm-linux-gcc%E5%92%8CMakefile

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值