У меня очень большая и замысловатая система изготовления, для завершения которой требуются часы.Я исследую потенциальные оптимизации, и у меня возник вопрос о том, можно ли расставить приоритеты для определенных целей.
Вот пример простого Makefile, который иллюстрирует концепцию:
Test%: Prog%
#run some post build verification on Prog{n}
# -- takes 30min or less on failure...
Prog1: A B
# do some linking
Prog2: B C
# do some linking
A B C:
# take 10 minutes each
И затем я запускаю
make -j2 Prog1 Test2
Тогда самый быстрый способ построить это будет:B
& C
, затем Prog2
& A
, затем Test2
и Prog2
.Конечно, обычно make сначала собирает A
и B
, что задерживает мой окончательный вывод на 10 минут.
Если я заранее знаю, что Test2
будет узким местом, верно?Можно ли расставить приоритеты для этой цели и всех ее зависимостей над другими целями в gnu make?
Чтобы добавить к вопросу, допустим, я строю Test1
, Test2
... Test20
.Тогда в этом случае я бы хотел, чтобы одна из целей - скажем, Test1
была выполнена как можно скорее, как если бы это не удалось, я хотел бы знать как можно скорее, чтобы я мог прекратить сборку и позволитькто-то другой использует сборочную машину.
Я рассмотрел возможность создания отдельных экземпляров make следующим образом:
make Test2 && make Prog1
Но, пока идет сборка теста, Prog1
не будет собираться, в результате чегов потраченных впустую циклах на сервере сборки.Если бы я попытался построить их параллельно с приоритетами:
`make Test2; nice -n -10 make Prog1`
Это может привести к условиям гонки при сборке B
.
Я еще не нашел каких-либо хороших решений, но я решил спросить на случай, если что-то пропустил.(Кроме того, я не уверен, должно ли это быть на SO или SuperUser - я выбрал здесь, поскольку это технически о «программировании», но, пожалуйста, не стесняйтесь исправлять меня, и я могу переместить это).