Ответ 1
У T2 есть предварительное условие для заказа.
T1: x y z | T2
$(MAKE) -j $^;
# Make will run the T2 rule before this one, but T2 will not appear in $^
У меня есть сторонний make файл, и я бы хотел, чтобы одна из целей (T1) не была создана до тех пор, пока не будет создана другая, настраиваемая цель (T2). Обычно это было бы достигнуто, сделав T2 необходимым условием T1. НО, T1 использует $^ в одном из своих правил. Поэтому, добавив предварительное условие, я в итоге разбиваю сборку... Что у меня есть:
T1: x y z T2
$(MAKE) -j $^;
# fails because T2 should not be passed to the make!!!
.PHONY: T2
T2:
#do some linking and prep for T1
Есть ли хороший способ гарантировать, что T2 запускается до T1? (Примечание: приведенный выше пример фактически упрощен бит. T1 на самом деле является целью vmlinux в make файле ядра Linux, поэтому переписывать его не только сложно, но и делает код не переносимым. Кроме того, я не могу запустить T2 до вызов make на ядре из-за некоторых других зависимостей).
У T2 есть предварительное условие для заказа.
T1: x y z | T2
$(MAKE) -j $^;
# Make will run the T2 rule before this one, but T2 will not appear in $^
Не могли бы вы просто вызвать Make в вашей сборке script с двумя целями в правильном порядке, например.
make T2 T1
Таким образом, вам не нужно вносить какие-либо изменения в T1.