Makefile - хорошее решение вашей проблемы. Вы можете запрограммировать это параллельное выполнение в оболочке, но, как вы заметили, это сложно. Параллельная реализация make не только позаботится о запуске заданий и обнаружении их завершения, но также будет выполнять балансировку нагрузки, что сложно.
Требование к глобализации не является препятствием: существуют реализации make, которые его поддерживают. GNU make, который имеет расширение подстановочного знака, например, $(wildcard *.c)
и доступ к оболочке, такой как $(shell mycommand)
(посмотрите функции в руководстве по GNU make для получения дополнительной информации). Это по умолчанию make
в Linux и доступно в большинстве других систем. Вот скелет Makefile, который вы можете адаптировать к вашим потребностям:
sources = $ (подстановочный знак * .src) все: $ (источники: .src = .tgt) % .tgt: $ .src do_something $ <$$ (производные_параммы $ <)> $ @
Запустите что-то вроде make -j4
параллельного выполнения четырех заданий или make -j -l3
сохранения средней нагрузки около 3.