让Makefile自己成为所有目标项的依赖项

    在程序开发时,Makefile有时也不断进行更改.更改后进行make时,由于make本能的反应只是检查与目标相关联的文件是不是应该更新,而不检查Makefile自己是否改变过.这样,当只对Makefile做了更改而没有对与目标相关联的程序文件做任何更改时,make就不工作,必须得把其中至少一个程序文件"更改"一下写回磁盘后才能重新编译.

  

    例如,有以Makefile文件内容如下:

my_exe_file: a.o b.o

cc -o my_exe_file a.o b.o

a.o: a.c a.h

cc -c a.c a.h

b.o: b.c b.h

cc -c b.c b.h

.PHONY: clean

clean:

rm *.o

rm my_exe_file

    则如果没有对程序文件a.c, b.c, a.h, b.h做任何改变,但是忽然想把Makefile中加入调试选项,只修改了Makefile文件如下:

 

my_exe_file: a.o b.o

cc -o my_exe_file a.o b.o -g

a.o: a.c a.h

cc -c a.c a.h -g

b.o: b.c b.h

cc -c b.c b.h -g

.PHONY: clean

clean:

rm *.o

rm my_exe_file

 

 

    然后重新运行make,发现提示:

make:'my_exe_file" is up to date.

这时,不得不重新把至少一个程序文件重新往磁盘写一遍,或者更改点什么内容才能让make重新编译.但是还得让所有受Makefile修改影响的目标文件重新编译,所以要么得先make clean,要么就得将所有被需要重新编译的目标文件所依赖的文件都保存一次.

 

    解决办法是在每个目标后面增加对Makefile的依赖.可以简单地添加一个*.o:Makefile,然后在第一个目标后面再加上Makefile.修改后的Makefile如下:

 

 

my_exe_file: a.o b.o Makefile

cc -o my_exe_file a.o b.o -g

a.o: a.c a.h

cc -c a.c a.h -g

b.o: b.c b.h

cc -c b.c b.h -g

*.o: Makefile

.PHONY: clean

clean:

rm *.o

rm my_exe_file

 

 

这样,以后无论对哪个程序文件进行修改,或者即使只对Makefile进行了修改,也会引起make对所有文件重新编译.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值