Критический раздел в параллельном файле make - PullRequest
8 голосов
/ 20 мая 2011

Я пытаюсь распараллелить старый Makefile.

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

Генераторы всегда вызываются перед компиляцией. Есть ли способ создать несколько критических разделов в make-файле?

Makefile грязный, я бы предпочел не публиковать его здесь.

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

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

all: ${SOURCES} scripts

scripts: last_script


first_script:
    ./script1.sh

second_script: first_script
    ./script2.sh

last_script: second_script
    ./script3.sh

source1.o: source1.c scripts
    gcc source1.c -c -o source1.o
3 голосов
/ 20 мая 2011

Вы можете поместить правила для сгенерированных файлов в отдельный Makefile и сделать что-то вроде этого:

generated-sources :
        $(MAKE) -f Makefile.Generators

Однако с GNU Make это будет параллельно по умолчанию.Вам нужно будет подавить это, и в руководстве не совсем ясно, как вы это сделаете.Может быть, подойдет какая-то комбинация из следующих, в зависимости от того, какие реализации вы хотите поддерживать:

  • Передайте флаг -j1:

    generated-sources :
            $(MAKE) -j1 -f Makefile.Generators
    
  • Подавить MAKEFLAGS опции:

    generated-sources :
            $(MAKE) -f Makefile.Generators MAKEFLAGS=
    
  • Подавить параллельное выполнение со следующей строкой в ​​Makefile.Generators:

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