Распараллеливание рекурсивных заданий в GNU делает

Нет никакого единственного интерфейсного или базового класса, который они все наследовали (который также не наследован другими классами), таким образом, простой ответ нет.

я действительно задаюсь вопросом, почему это - проблема все же. Что Вы желаете сделать в своем классе IntegerFunction, который может только быть сделан к целым числам?

14
задан tshepang 7 January 2014 в 16:40
поделиться

3 ответа

SUBDIRS = a b c

default: all

$(SUBDIRS)::
    $(MAKE) -C $@ $(MAKECMDGOALS)

all clean : $(SUBDIRS)
15
ответ дан 1 December 2019 в 10:02
поделиться

Являются ли dir-1, dir-2 и dir-3 взаимозависимыми или независимыми?

У меня аналогичная структура, но зависимость между подкаталогами, поэтому я предпочел использовать только параллельные сборки в каждом из подкаталогов. Вы получите это через

## default to four parallel runs
MAKEFLAGS += -j 4  

all:
  @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) ); done

. Но еще один трюк - прочитать SUBDIRS в руководстве по make - вам не нужен цикл for , так как make ] может развернуть это за вас. Попробуйте что-нибудь вроде

## default to four parallel runs
MAKEFLAGS += -j 4  

SUBDIRS =    dir-1 dir-2 dir-3

$(SUBDIRS):  #whatever your depends here
             $(MAKE) -C $@
3
ответ дан 1 December 2019 в 10:02
поделиться

Это, вероятно, не даст прямого ответа на ваш вопрос, но помимо того, что предлагают другие ответы, я бы рекомендовал изучить нерекурсивные методы make. Это действительно элегантный способ распараллелить сборку, хотя, в зависимости от существующих файлов Makefile, может потребоваться значительные усилия. У нерекурсивного make есть преимущества, не ограничивающиеся простым распараллеливанием: он видит полный граф зависимостей, и поэтому ему не нужно строить слишком мало или слишком много, что означает более быстрое (иногда намного более быстрое) время сборки.

Некоторые ресурсы:

5
ответ дан 1 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: