Мне неизвестна какая-либо реализация make
, которая динамически адаптирует степень параллелизма в соответствии с потреблением ресурсов. Действительно, хотя в некоторой степени существует потенциал для этого, проблема не может быть решена на make
, поскольку потребление ресурсов процессами не является статичным. То есть make
может предположительно наблюдать, скажем, что физическая ОЗУ была перегружена, и реагировать, сдерживая запуск новых дочерних процессов, но он не может легко защитить от запуска нескольких дочерних процессов, пока потребление ресурсов низкое, что затем приводит ктребует больше ресурсов, чем доступно.
Однако, в зависимости от make-файла, может быть обходной путь: вы можете назвать конкретные цели для make
для сборки. Вы можете использовать это, чтобы указать, какие цели вы хотите построить параллельно, а затем запустить отдельный make
для последовательного завершения сборки. Это может выглядеть примерно так:
make -j4 object1.o object2.o object3.o object4.o
make
Хотя это довольно громоздко. Предположим, что существует цель (или вы можете ее создать), которая представляет все объектные файлы, но не какие-либо из связанных библиотек / исполняемых файлов, тогда вы можете использовать это:
Makefile
OBJECTS = object1.o object2.o object3.o object4.o
all: my_program
my_program: objects
# ...
# This target collects all the objects:
objects: $(OBJECTS)
.PHONY: all objects
Командная строка
make -j4 objects
make