make: отключить параллельное построение в подкаталоге только для одной цели

У меня есть довольно большой проект на основе autotools, который живет в дереве каталогов, состоящем из множества каталогов с подкаталогами. У него есть цель check (в каждом подкаталоге, а также в основном каталоге), которая выполняет множество автоматических тестов. Цель check строится рекурсивно.

Параллельное создание и тестирование (с помощью опции -j) работает для большинства каталогов. Однако есть один каталог, содержащий тесты, которые не работают при параллельном выполнении (чувствительность к времени), но проходят при последовательном запуске.

Возникает вопрос: есть ли способ заставить make последовательно строить цель check только в этом одном подкаталоге, а все остальное строить параллельно?


person arne    schedule 18.06.2013    source источник
comment
Единственный трюк, который я могу придумать, это вставить ложную зависимость для последовательной проверки. В руководстве есть основная идея.   -  person Brett Hale    schedule 19.06.2013
comment
Почему бы не решить эту проблему, сделав цели зависимыми друг от друга?   -  person reinierpost    schedule 05.01.2015


Ответы (2)


Если я вас правильно понял, то когда вы запускаете рекурсивную make, которая создает цель check, вы можете просто передать -j1 конкретно, чтобы убедиться, что она работает последовательно:

check: ; $(MAKE) -j1 ...
person MadScientist    schedule 18.06.2013
comment
Попробую, когда найду пару минут. - person arne; 19.06.2013
comment
Это не работает: это дает мне предупреждение: -jN принудительно в submake - person Vincent Fourmond; 24.05.2014
comment
Это ДЕЙСТВИТЕЛЬНО работает. Да, вы получите предупреждение. Но он не будет запускать задания параллельно. Использование NOTPARALLEL чище, ЕСЛИ вы всегда хотите, чтобы каждый вызов этого make-файла выполнялся не параллельно (а не только конкретный вызов, вызывающий конкретную цель), и вы можете изменить make-файл. Если одно или оба из них неверны, то NOTPARALLEL менее полезен. - person MadScientist; 08.01.2015

Добавьте к Makefile:

.NOTPARALLEL:

См. документацию GNU make здесь.

person Anthony Scemama    schedule 04.01.2015