У меня есть проект, состоящий из набора make-файлов, которые НЕ МОГУТ запускаться с make --jobs=N
, потому что зависимости не указаны достаточно сильно для make
, чтобы правильно выполнить рецепты в правильном порядке (т.е. получить условия гонки).GNU make - ускорить непараллельный make-файл без изменений
В настоящее время я использую Huddle, Electric-Cloud.com, и он выполняет именно то, что мне нужно: он анализирует make-файл и затем выполняет задания параллельно и учитывает неопределенные зависимости.
Вопрос: есть ли это бесплатная или бесплатная вещь, которая делает это?
Да, я знаю, что я мог бы переписать make-файлы, но руководство проектом говорит «нет».
UPDATE # 1
Я понимаю, что я должен буду делать некоторые работу, чтобы получить функциональность, аналогичную функциональность электросварных Клауда.
Я знаю, что Electric-Cloud анализирует файлы makefile для поиска зависимостей, поэтому одно и то же не должно выполняться с помощью makedepend
?
Я имею в виду:
- Выполнить
makedepend
существующих Makefiles - поток на выходе с помощью
include <makedepend.output>
make all --jobs=64
UPDATE 2
Оказывается makedepend
специфичен для C/C++: он просто запускает предварительный процессор в исходных файлах и анализирует любые операторы #include
; не то, что мне нужно.
мне нужно то, что этот парень просит: Build a makefile dependency/inheritance tree
UPDATE 3
Makefile, "генератор граф зависимостей" на самом деле уже существует
http://plindenbaum.blogspot.com/2012/11/visualizing-dependencies-of-makefile.html?m=1
, но это не будет помочь мне.
Многие из моих рецептов создают каталоги, которые используются в рецептах других целей, что делает их неявными предпосылками.
Инструмент зависимости от графика по URL-адресу работает, анализируя инструкции журнала построения, но эти утверждения не указывают на неявные зависимости.
Даже если я пытаюсь запустить мой Makefile с --dry-run
, сборка терпит неудачу, потому что некоторые из рецептов, которые не выполняются - причина это всухую - создать каталоги, другие вызовы make
нужно просто «притворяются выполнить» а рецепт.
UPDATE 4
Electric-Cloud сделал Хаддл - 4 локальных ядер, некластеризованные - бесплатно для тех, кто навсегда. Кроме того, они выводят .xml-файл, в котором перечислены зависимости каждого задания, поэтому я могу использовать его для исправления совместимых файлов make-файлов, чтобы они были совместимы с опцией --jobs
.
Вам не нужно переписывать существующие make-файлы, чтобы добавить информацию о зависимостях. Вы можете добавить это все в один или несколько дополнительных файлов make-файлов, если вы можете указать информацию вручную (или автоматически сгенерировать ее). Это может быть «автоматическим», поскольку вы можете быть умны в обнаружении зависимостей. Это, в конечном счете, то, что Electric Cloud наложило на него серьезное время/работу, сортируя эти данные из * внутри * процесса make. –
@EtanReisner Как я могу автоматически генерировать его? – Adrian
Это зависит полностью от того, что такое зависимости и как вы можете их обнаружить. Я считаю, что, по крайней мере, некоторые из инструментов EC показывают это, буквально отслеживая 'open'/etc. системные вызовы во время сборки, чтобы создать профиль и сделать это по нескольким поддельным, а затем реальным, а затем повторно запускать сборки, чтобы убедиться, что они правильно. Если вы можете анализировать свои файлы для зависимостей, это одно. Если вам нужно запустить их для него (динамические плагины, активы и т. Д.), Это другое. Здесь нет «простого» решения (поэтому у EC есть значимый продукт). –