#makefile #parallel-processing #gnu-make
#makefile #параллельная обработка #gnu-make
Вопрос:
-j
Опция GNU Make удобна, хотя вы должны быть осторожны с вашими зависимостями. В моей среде это ускорило время сборки и тестирования в 5-6 раз. Но я хочу запускать свои тесты с покрытием, и это создает проблему, поскольку gcov
инструментарий плохо обрабатывает параллелизм, в основном пытаясь одновременно записывать в один и тот же .gcda
файл.
Я выяснил, как распределить информацию о покрытии по отдельным каталогам для каждого теста, который работает. Однако это влечет за собой штраф за последующую обработку всей информации о покрытии.
Итак, я ищу способ узнать, был ли -j
использован при вызове, чтобы иметь возможность автоматически избегать дополнительной обработки, если в этом нет необходимости. Возможно ли это?
Комментарии:
1. По умолчанию вы должны иметь доступ к параметрам, используемым для вызова
make
черезMAKEFLAGS
, который существует, по сути, для того, чтобы узнать, какmake
был вызван, и разрешить их распространение в подпроцессы создания.2. Гаах, конечно! Спасибо. Сделайте это ответом, и я приму его.
Ответ №1:
По умолчанию вы должны иметь доступ к параметрам, используемым для вызова make
через MAKEFLAGS
, который настраивается автоматически и, по сути, позволяет узнать, как был вызван make, и разрешить их распространение в процессе (ах) под-make.