LINUX.ORG.RU

make «наследованеи» многопоточности

 , ,


0

1

Есть некий Makefile такого содержания:

all:
        [ -d subdir1 ] && $(MAKE) -C subdir1 ; true
        [ -d subdir2 ] && $(MAKE) -C subdir2 ; true
        [ -d subdir3 ] && $(MAKE) -C subdir3 ; true
И вобщем все работает, но если я запускаю:
$ make -j4
То толку ноль так как «$(MAKE) -C subdir1» не наследует параметр "-j".

Какбы поправить код так чтоб make в subdir1, subdir2 и тд. наследовал значение -j ?

★★★★

Последнее исправление: zaz (всего исправлений: 1)

Ответ на: комментарий от xaizek

Помогла деректива

.EXPORT_ALL_VARIABLES:
Спасибо за ссылку :)

zaz ★★★★
() автор топика

https://www.gnu.org/software/make/manual/html_node/Job-Slots.html#Job-Slots

'+' перед правилом передает jobserver. $(MAKE) его тоже наследует. Для GMU Make код менять не нужно.

# cat Makefile
all:
        [ -d . ] && $(MAKE) a

all_make:
        [ -d . ] && make a

all_parallel:
        +[ -d . ] && make a

a: 1 2 3

1 2 3:
        @echo start $@
        sleep 1
        @echo done $@
# с $(MAKE) jobserver работает:
$ make -j3
[ -d . ] && make a
make[1]: вход в каталог «/tmp/z»
start 1
sleep 1
start 2
sleep 1
start 3
sleep 1
done 1
done 2
done 3
make[1]: выход из каталога «/tmp/z»
# с 'make' не работает
$ make all_make -j3
[ -d . ] && make a
make[1]: предупреждение: сервер заданий недоступен: используется -j1. Добавьте «+» к правилу в родительском make.
make[1]: вход в каталог «/tmp/z»
start 1
sleep 1
done 1
start 2
sleep 1
done 2
start 3
sleep 1
done 3
make[1]: выход из каталога «/tmp/z»
# с '+make' работает
$ make all_parallel -j3
[ -d . ] && make a
make[1]: вход в каталог «/tmp/z»
start 1
sleep 1
start 2
sleep 1
start 3
sleep 1
done 1
done 2
done 3
make[1]: выход из каталога «/tmp/z»
sf ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.