使用'make again'来清理和重制

时间:2015-08-24 15:25:42

标签: makefile

我希望通过make again设置一个虚假目标来“重新制作”项目,而不是键入make clean && makemake clean all(这似乎是我想'全部清理')或制作执行此操作的别名/函数/脚本。

指定类似的东西是否安全:

again: clean all

从某种意义上说,先决条件是从左到右可靠地更新的? 或者,也许,最好像

那样进行递归调用
again:
    $(MAKE) clean   # maybe ‘&& \’ here
    $(MAKE) all

我的意思是,任何一种方法都可能存在任何陷阱或不兼容性shell函数或make clean && make的别名更安全吗?

谢谢。

1 个答案:

答案 0 :(得分:4)

  

指定类似的东西是否安全:

again: clean all
     

从某种意义上说,先决条件是从左到右可靠地更新的?

这不安全,因为all不依赖于clean所以如果有人运行make -j2 again,那么这两个目标可以并行运行。

您的第二种方法会更好用,因为它可以确保$(MAKE) all$(MAKE) clean完成之前无法启动。但这并不完全安全,因为如果有人make -j2 clean again那么那些两个目标可以并行运行,这大致相当于make clean & make clean all,这仍然允许all 1}}步骤与第一个clean并行运行。

更好的选择是:

again: clean
    $(MAKE) all

这样,如果有人make clean again,那么它只会执行一次清理,如果他们执行make -j2 clean again,它仍然可以确保clean目标在$(MAKE) all运行之前完成。