У меня есть процедура сборки, примерно описанная в следующем примере Makefile:
a: b
@echo "Build a, just using b. Don't care about c."
touch a
b: c
@echo "Constructing b from c is cheap..."
touch b
@echo "Once accomplished, I no longer need c."
c:
@echo "Constructing c is very expensive..."
@echo "Work work work..."
touch c
clean:
$(RM) a b c
example: clean
make a
$(RM) c
make a
Дело в том, что мне нужно c
, чтобы собрать b
, но как только у меня будет b
, я никогда не будуснова нужно c
.Когда я make example
, make
делает c
, b
и a
(как и ожидалось), удаляет c
, а затем, в последнем вызове make a
, просто переделывает c
(и НЕ переделывает b
и a
, хотя я бы подумал, что они устарели).Но, поскольку моя цель - a
, а b
не изменилась, я не хочу переделывать c
.Забудь об этом!Какая разница!a
следует считать актуальным.
Другая особенность заключается в том, что когда я
make a
rm c
make a
(а не make example
), во втором вызове make
перестраивает все (в то время как в make example
второй вызов просто перестраивает c
).
Как мне помешать make
построить c
, когда его цель a
и все a
'Непосредственные предпосылки существуют и более свежи, чем они (a
не устарела по сравнению с b
), даже если предпосылки предварительных условий нет?
Редактировать: Я думаю, что я могу хотетьдолжен обрабатывать каждый файл как старый (например, с --old-file
) , если этот файл не существует .