Как использовать Makefile с меткой NOTPARALLEL?

У меня есть 5 ярлыков в Makefile:

all: label1 label2 label3 label4 last_label

я хочу last_label должно быть сделано в прошлом, и я хочу использовать make -j, Если я использую .NOTPARALLEL, это сделает их всех NOTPARALLELЛюбое предложение о том, как это сделать?

2 ответа

Решение

Создайте цель, указав четыре цели, которые могут выполняться параллельно, и включите это и last_label в all цель:

intermediate: label1 label2 label3 label4

all:
        $(MAKE) intermediate
        $(MAKE) last_label

Это выполнит цели, указанные в intermediate параллельно, но intermediate а также last_label будет вынужден последовательно.

(Обратите внимание, что ведущий пробел перед $(MAKE) это TAB персонаж.)

Если причина last_label нужно запустить в последнюю очередь, что ему нужны данные из других меток, лучший подход будет сказать make об этой зависимости:

all: last_label

last_label: label1 label2 label3 label4

Если нет истинной зависимости (то есть, если вы не хотите last_label будет перестроен, если один из других изменится), и если вы используете GNU Make, вы можете указать их как зависимости "только для заказа":make просто убедитесь, что они существуют, прежде чем last_label построено:

all: last_label

last_label: | label1 label2 label3 label4
Другие вопросы по тегам