2016-06-01 6 views
1

У меня есть проект, состоящий из набора make-файлов, которые НЕ МОГУТ запускаться с make --jobs=N, потому что зависимости не указаны достаточно сильно для make, чтобы правильно выполнить рецепты в правильном порядке (т.е. получить условия гонки).GNU make - ускорить непараллельный make-файл без изменений

В настоящее время я использую Huddle, Electric-Cloud.com, и он выполняет именно то, что мне нужно: он анализирует make-файл и затем выполняет задания параллельно и учитывает неопределенные зависимости.

Вопрос: есть ли это бесплатная или бесплатная вещь, которая делает это?

Да, я знаю, что я мог бы переписать make-файлы, но руководство проектом говорит «нет».

UPDATE # 1

Я понимаю, что я должен буду делать некоторые работу, чтобы получить функциональность, аналогичную функциональность электросварных Клауда.

Я знаю, что Electric-Cloud анализирует файлы makefile для поиска зависимостей, поэтому одно и то же не должно выполняться с помощью makedepend?

Я имею в виду:

  1. Выполнить makedepend существующих Makefiles
  2. поток на выходе с помощью include <makedepend.output>
  3. 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.

+2

Вам не нужно переписывать существующие make-файлы, чтобы добавить информацию о зависимостях. Вы можете добавить это все в один или несколько дополнительных файлов make-файлов, если вы можете указать информацию вручную (или автоматически сгенерировать ее). Это может быть «автоматическим», поскольку вы можете быть умны в обнаружении зависимостей. Это, в конечном счете, то, что Electric Cloud наложило на него серьезное время/работу, сортируя эти данные из * внутри * процесса make. –

+0

@EtanReisner Как я могу автоматически генерировать его? – Adrian

+0

Это зависит полностью от того, что такое зависимости и как вы можете их обнаружить. Я считаю, что, по крайней мере, некоторые из инструментов EC показывают это, буквально отслеживая 'open'/etc. системные вызовы во время сборки, чтобы создать профиль и сделать это по нескольким поддельным, а затем реальным, а затем повторно запускать сборки, чтобы убедиться, что они правильно. Если вы можете анализировать свои файлы для зависимостей, это одно. Если вам нужно запустить их для него (динамические плагины, активы и т. Д.), Это другое. Здесь нет «простого» решения (поэтому у EC есть значимый продукт). –

ответ

0

В настоящее время я использую Huddle, Electric-Cloud.com, и он выполняет именно то, что мне нужно: он анализирует файл makefile и затем выполняет задания параллельно и учитывает неопределенные зависимости.

Я на самом деле не знаю об этих инструментах, но вы не можете предоставить им супер Makefile под вашим контролем, что проясняет внутреннюю взаимозависимость различных целей?

Возможно, вам просто нужно добавить некоторый уровень косвенности для этой структуры (импортированных?) Проектов, а другой Makefile.

+0

Возможно. Но Electric-Cloud работает, не обеспечивая ничего дополнительного. Я ищу такой инструмент. – Adrian

+0

@Adrian Ну, вы как-то вводите make-файл _main для этого инструмента, не так ли? –

+0

Да, есть основной файл makefile. , , но единственная работа, которую я делаю, заключается в замене 'make all'' emake all'. Я согласен с тем, что мне нужно будет выполнить некоторую дополнительную работу для решения free-er, чем [email protected] Комментарий EtanReisner к моему основному вопросу идет по правильному пути: мне нужен инструмент для автоматического создания зависимостей, а затем для его подачи в мой make-файл. – Adrian

Смежные вопросы