Интересная проблема. Единственный способ, которым я могу придумать для этого, - это внешняя запись самой последней цели (например, передать ее в файл), а затем проверить, совпадает ли она с текущей или отличается от нее. Если они одинаковые, просто запустите обычный процесс сборки; если они различаются, сначала запустите make clean
.
Я предпринял первую попытку, чтобы проиллюстрировать процесс (не проверено).
debug release:
ifneq ($(MAKECMDGOALS),$(shell cat last_target.txt))
$(MAKE) clean
endif
@echo $@ > last_target.txt
[regular build commands]
Это предполагает, что обе цели имеют одинаковый рецепт (с разными настройками для определенных переменных). Если они имеют разные рецепты, условная часть и команда echo, очевидно, должны быть вставлены в оба рецепта.