GNU make умеет выполнять несколько проектов одновременно. Обычно make выполняет только один проект за раз, ожидая его завершения перед выполнением следующего.
Однако опция "-j" или "--jobs" позволяет make выполнять множество проектов одновременно. Вы можете запретить параллелизм в конкретном make-файле с помощью псевдоцели .NOTPARALLEL.
1 | make -j |
1 | make -j3 |
1 | make -j 64 |
Получить количество потоков или ядер процессора и использовать весь потенциал процессора:
1 | make -j $(nproc) |
Если за опцией "-j" следует целое число, то это количество проектов, которые будут выполняться одновременно; это называется количеством слотов для заданий. Если после опции "-j" нет ничего похожего на целое число, количество слотов для заданий не ограничено. По умолчанию число слотов заданий равно одному, что означает последовательное выполнение (одно задание за раз).
При обработке рекурсивных вызовов make возникают проблемы с параллельным выполнением.
Если проектов завершается неудачно (завершается сигналом или завершается с ненулевым статусом), и ошибки не игнорируются для этого проекта, остальные строки проекта для переделки той же цели не будут выполняться. Если проект не работает, а опция "-k" или "--keep-going" не была задана, make прерывает выполнение. Если make завершает работу по какой-либо причине (включая сигнал) с запущенными дочерними процессами, он ожидает их завершения перед фактическим выходом.
Когда система сильно загружена, вы, вероятно, захотите запускать меньше заданий, чем когда она слабо загружена. Вы можете использовать опцию "-l", чтобы указать make ограничить количество одновременно выполняемых заданий, основываясь на средней нагрузке. За опцией "-l" или '--max-load' следует число с плавающей точкой. Например,
1 | make -l 2.5 |
не позволит запустить более одного задания, если средняя нагрузка выше 2,5. Опция "-l" без следующего числа удаляет ограничение нагрузки, если оно было задано предыдущей опцией "-l".
Точнее, когда make собирается запустить задание, но уже запущено хотя бы одно задание, он проверяет текущее среднее значение нагрузки; если оно не ниже предела, заданного опцией "-l", make ждет, пока среднее значение нагрузки не станет ниже этого предела, или пока не завершатся все остальные задания.
По умолчанию предел нагрузки отсутствует.