我希望通过make again
设置一个虚假目标来“重新制作”项目,而不是键入make clean && make
或make clean all
(这似乎是我想'全部清理')或制作执行此操作的别名/函数/脚本。
指定类似的东西是否安全:
again: clean all
从某种意义上说,先决条件是从左到右可靠地更新的? 或者,也许,最好像
那样进行递归调用again:
$(MAKE) clean # maybe ‘&& \’ here
$(MAKE) all
我的意思是,任何一种方法都可能存在任何陷阱或不兼容性shell函数或make clean && make
的别名更安全吗?
谢谢。
答案 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
运行之前完成。