powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / [GNU Make] Makefile: запретить параллельный вызов команды
3 сообщений из 3, страница 1 из 1
[GNU Make] Makefile: запретить параллельный вызов команды
    #38422142
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть Makefile. Из него собирается некая С++ либа. В процессе сборки необходимо дёргать, помимо всего прочего, генератор исходников .
То есть имеем банально такие цели
Код: sql
1.
2.
src1.cpp src2.cpp src3.cpp: expose.h
   source_generator_command


от этих исходников соответственно зависят цели объектных файлов. Генератор за один вызов генерит несколько .cpp файлов, а не по одному.

При вызове make происходит всё на ура.
Проблемы возникают если запустить, например, make -j4 -- запускается параллельно сразу 3 экземпляра source_generator_command, а это не клёво. Достаточно одного вызова, но нужно подождать чтобы генератор отработал.
Есть вариант указания псевдо-цели .NOTPARALLEL, но тогда весь Makefile будет собираться в 1 job. Это тоже плохо.
Посоветовали ещё .PHONY -- всё отлично работает, source_generator_command вызывается 1 раз, другие job'ы ждут:
Код: sql
1.
2.
3.
4.
5.
6.
.PHONY: SourceTargets

SourceTargets: expose.h
   source_generator_command

src1.cpp src2.cpp src3.cpp: SourceTargets


Но если запускать повторно, то каждый раз вызывается генератор и заново генерит исходники (что и ожидалось от .PHONY) -- об инкрементальном билде забываем.

Подскажите, знающие люди, как победить такую, казалось бы, никчёмную проблему?
P.S. Я не слишком осведомлён о фичах Makefile'ов.
...
Рейтинг: 0 / 0
[GNU Make] Makefile: запретить параллельный вызов команды
    #38423443
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решение "в лоб":
вынеси рецепты для всех подобных целей в отдельный makefile с .NOTPARALLEL, а в главном сделай:
Код: sql
1.
2.
3.
4.
.PHONY: nonparallel_execution

nonparallel_execution: expose.h
   $(MAKE) nonparallel_execution.mk


Оно будет запускать вложенный make конечно, но тот будет сразу выходить если делать ему нечего.
...
Рейтинг: 0 / 0
[GNU Make] Makefile: запретить параллельный вызов команды
    #38423609
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал как указано в http://www.gnu.org/savannah-checkouts/gnu/automake/manual/html_node/Multiple-Outputs.html последний самый вариант со спинлоками.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / [GNU Make] Makefile: запретить параллельный вызов команды
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]