GNU делает вложенные звонки - PullRequest
2 голосов
/ 07 июня 2019

Мне нужно найти способ избежать параллельных вызовов, которые следует выполнять параллельно, и не получать предупреждение: make [1]: предупреждение: -jN принудительно в submake: отключение режима сервера заданий.

У меня есть несколько вызовов make, которые выполняются параллельно, потому что основной вызов make выполняется с флагом -jN с N> 1 Я получаю предупреждение, указанное выше, и вижу Makefile и вызываю его. Тем не менее, я попытался использовать несколько опций, представленных в документации по gnu / make, и до сих пор не могу получить предупреждение.

a)
+make -C $FOO $@

b)
make MAKEFLAGS= -C $FOO $@

c)
make -j1 -C $FOO $@

d)
.NOTPARALLEL:bar

Мне нужна вся компиляция для запуска без предупреждений (потому что они рассматриваются как ошибки). Но предупреждение, описанное выше, продолжает появляться.

1 Ответ

0 голосов
/ 07 июня 2019

Предупреждение исходит от вызванного make, потому что он получает определенные связанные с сервером заданий флаги через MAKEFLAGS.

Чтобы показать это, мы можем воспроизвести сообщение об ошибке в простом вызове make, какthis:

make --jobserver-fds=3,4 -j1
make: warning: -jN forced in submake: disabling jobserver mode.
... other errors about those being bad file descriptors ...

Переопределение MAKEFLAGS в командной строке make не делает этого, потому что это интерпретируется вызванным make после того, как он уже получил MAKEFLAGS отродитель.Но мы можем перехватить переменную окружения родителя с помощью внешней утилиты env:

yourtarget: yourprereq
        env MAKEFLAGS= make -j1 -C $FOO $@

С env мы имеем полный контроль над тем, какие переменные окружения видят вложенные make.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...