Скажи, что у меня есть такой Makefile
B: A
quick-custom-script < $< > $@
C: B
slow-custom-script < $< > $@
Также предположим, что вполне может случиться, что изменения в A
приведут к тому же B
. Я хотел бы добиться, чтобы в таком случае сложное создание C
не учитывалось, потому что , что , безусловно, является ненужной работой, когда он имеет неизменный ввод.
Моя идея заключалась в том, чтобы поместить выходные данные quick-custom-script
во временный файл, сравнить его с текущим B
и перезаписать B
только при обнаружении различий.
В этом случае правило C
все равно будет видеть старый B
и ничего не делать. К сожалению, это создает еще одну проблему, которую я вижу (и, возможно, больше?): При любом последующем запуске, даже без внесенных изменений, A
будет новее, чем не перезаписанный B
и, следовательно, (даже если это быстро) первый скрипт будет запущен - излишне.
Я думаю, что это может быть несколько минимизировано следующим образом
Btemp: A
quick-custom-script < $< > $@
B: Btemp
diff -q $< $@ || cp $< $@
C: B
slow-custom-script < $< > $@
Тем не менее, мне интересно, есть ли более разумный способ достичь моей цели?