Если вы используете GNU make:
all:
@echo $@
@sleep 1
@echo end $@
clean:
@echo $@
@sleep 1
@echo end $@
fresh:: clean
fresh:: all
.PHONY: clean fresh all
Обратите внимание на двойное двоеточие после цели s fresh
!См. документацию :
Правила двойного двоеточия для цели выполняются в том порядке, в котором они указаны в файле makefile.
Если вы запуститеmake -j2 fresh
показывает, что работает как ожидалось:
clean
end clean
all
end all
Но с fresh:: clean all
не работает должным образом параллельно (возможно, неожиданно).
С BSD make:
all:
@echo $@
@sleep 1
@echo end $@
clean:
@echo $@
@sleep 1
@echo end $@
fresh: clean all
@echo $@
.ORDER: clean all
.PHONY: clean all fresh
Обратите внимание, что строка начинается с .ORDER
.Он также хорошо работает при распараллеливании (см. man make ).Без распараллеливания учитывается порядок зависимостей в строке fresh:
.