使用“再次制作”来清理和重新制作

use*_*199 2 makefile

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

指定这样的东西是否安全:

again: clean all
Run Code Online (Sandbox Code Playgroud)

从某种意义上说,先决条件从左到右可靠地更新?或者,也许,最好像这样进行递归调用

again: clean all
Run Code Online (Sandbox Code Playgroud)

我的意思是,这两种方法是否存在任何缺陷或不兼容之处,可能会使创建例如 shell 函数或别名make clean && make更安全?

谢谢你。

Jon*_*ely 5

指定这样的东西是否安全:

again: clean all
Run Code Online (Sandbox Code Playgroud)

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

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

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

更好的选择是:

again: clean
    $(MAKE) all
Run Code Online (Sandbox Code Playgroud)

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