Рассмотрим этот make-файл:
default: c
a:: b
touch a
a:: b
ls -lt a b
touch a
c: a
touch c
Вывод такой:
$ touch b
$ make
touch a
ls -lt a b
-rw-r--r-- 1 tkcook tkcook 0 Apr 1 11:32 a
-rw-r--r-- 1 tkcook tkcook 0 Apr 1 11:31 b
touch a
touch c
Я понимаю, что правила с двойным двоеточием позволяют выполнять несколько правил для одной и той же цели, но все они все еще зависят от того, являются ли предварительные условия более новыми, чем цель, которую нужно инициировать. Поэтому в этом случае я ожидал, что a
новее, чем b
после выполнения первого правила, предотвратит запуск рецепта второго правила, но вместо этого будут выполнены оба правила для создания a
.
В конечном счете, я пытаюсь справиться с ситуацией, когда есть два возможных способа достижения цели. Один очень дешевый, но не всегда работает, тогда как другой очень дорогой, но всегда работает. Когда цель устарела, я бы хотел сначала попробовать первый метод, а затем вернуться к второму (только), если первый не удался. Учитывая, что правила двойного двоеточия, кажется, не достигают этого, что я могу сделать вместо этого?