Makefile - передача параметров заданий в подфайлы make - PullRequest
5 голосов
/ 05 февраля 2012

У меня есть make-файл, который вызывает несколько других make-файлов.

Я бы хотел передать параметр -j другим вызовам make-файла.

Что-то вроде (make -j8):

 all:
     make -f libpng_linux.mk -j$(J)

Где $ (J) - значение 8 из -j8.Я абсолютно клянусь, что делал это раньше, но не могу найти свой пример.

$ (MAKEFLAGS), похоже, содержит --jobserver-fds = 3,4 -j независимо от того, что -j2 или -j8

Редактировать: Возможное решение:

Скоро опубликует это как ответ.

Похоже, одно решение - не беспокоиться об этом.Включите -j8, когда вы вызываете основной make-файл.Дополнительные вызовы для вызова должны выглядеть следующим образом:

 all:
      +make -f libpng_linux.mk -j$(J)

Обратите внимание на «+» перед make.Я заметил, что make выбрасывает предупреждение при попытке параллельных сборок: make [1]: warning: сервер заданий недоступен: используется -j1.Добавьте `+ 'к родительскому правилу make.

Ответы [ 2 ]

5 голосов
/ 05 февраля 2012

Только определенные флаги входят в $(MAKEFLAGS). -j не включен, потому что субмодера общаются друг с другом, чтобы обеспечить выполнение соответствующего количества заданий

Кроме того, вы должны использовать $(MAKE) вместо make, поскольку $(MAKE) всегда будет иметь правильное имя исполняемого файла (которое может не быть make).

0 голосов
/ 28 января 2019

«Не делай этого» - не всегда ответ, но в данном случае это, по крайней мере, для GNU make.

В GNU make родительский процесс имеет внутренний сервер заданий . Если верхний уровень Makefile запускается с -j, подпроцесс make s будет общаться с сервером заданий и считывать с него уровень параллелизма, без явного -j.

...