2010-01-23 5 views
10

Мой первый вопрос (yay!) - о gnumake и параллельных сборках. Вот простой пример файл:Параллельное здание с gnumake и предпосылками

.PHONY: tool_1 tool_2 tool_3 tool_4 all tools 

all: | tools 

tools: | tool_2 tool_3 tool_4 

tool_1: 
    # commands for tool 1 

tool_2: | tool_1 
    # commands for tool 2 

tool_3: | tool_1 
    # commands for tool 3 

tool_4: | tool_1 
    # commands for tool 4 

Если я make -j на этом парне, что я здесь правильно, чтобы гарантировать, что команды для tool_1 выполняется ровно один раз, и перед make пытается построить любого из tool_[234]?

То, что я ищу, чтобы иметь make -j причину tool_1 будет построена первым, то tool_[234] будет построены параллельно, но без выполнения команд для tool_1 три раза. Я надеюсь, что в этом есть смысл. Спасибо за любые предложения или идеи!

+0

Это похоже на то, что я работаю так, как хочу, но этот материал параллельной сборки имеет способ изменения поведения, основанного на загрузке системы или от машины к машине, и т. Д. –

ответ

8

make -j ведет себя точно так же, как вы ожидаете в своем вопросе. Он не делает зависимости несколько раз.

Что делает эта труба (|) персонаж в вашем списке зависимостей?

+10

предварительные условия для заказа: http: // www.gnu.org/software/make/manual/make.html#Prerequisite-Types – Amro

+0

Это здорово, спасибо @Alex. Я не мог найти ничего в документации, которая появилась прямо и сказала это. –

+0

Мне показалось, что я знаю, что GNU неплохо работает, но это была особенность, которую я пропустил. – JesperE

 Смежные вопросы

  • Нет связанных вопросов^_^