Проверка зависимостей - как очистить проект с испорченными make-файлами - PullRequest
6 голосов
/ 27 октября 2008

У меня очень большой C-проект с множеством отдельных C-файлов и заголовков и многими десятками участников. Многие участники не имеют достаточных знаний о make-файлах и зависимостях, что приводит к нередкой проблеме, когда вам почти всегда приходится «очищать», прежде чем можно доверять «make» для получения правильного вывода.

Если бы make занял минуты, это не было бы проблемой, но сейчас на быстрой машине это почти 2 часа, и люди начинают проверять код, который работает, когда они делают, но они не чистят сначала, и их код в конечном итоге нарушает сборку. Не спрашивайте, почему они не перехватываются менеджером сборки до того, как будет вырезана новая базовая линия ...

Да, мы не должны были отпускать это далеко.

Да, мы обучаем наших разработчиков.

Как обычно, у нас нет времени, чтобы остановить все и исправить это вручную.

Я думаю, что есть инструменты по этим направлениям:

  • Существуют ли автоматизированные инструменты, помогающие создать правильную информацию о зависимостях для существующего проекта из файлов C и H?
  • Существуют ли автоматизированные инструменты для описания информации о зависимостях в соответствии с make-файлами?
  • Есть ли святой Грааль инструмента для описания различий между двумя вышеупомянутыми деревьями зависимостей?

Но что еще можно / нужно сделать, чтобы решить эту проблему?

Заранее спасибо ...

-Adam

Ответы [ 4 ]

6 голосов
/ 27 октября 2008

Возможно, проще всего перейти с Make на инструмент, который автоматически обнаруживает зависимости. Например, SCons не заставляет вас перечислять зависимости, а вместо этого автоматически анализирует компилируемые файлы и ищет включения. Вы просто указываете, какие файлы должны быть скомпилированы и какие файлы попадают в какие исполняемые файлы. Переключение систем сборки будет легче, поскольку ваши разработчики не являются экспертами в Make.

Другая альтернатива, если вы придерживаетесь команды Make, - это использование опции gcc -M для автоматического определения зависимостей. Ответ на вопрос Автоматическое обнаружение зависимостей C содержит пример того, как заставить ваши make-файлы автоматически обнаруживать зависимости, так что вам не нужно указывать их вручную.

4 голосов
/ 27 октября 2008
3 голосов
/ 27 октября 2008

У нас та же проблема на моем рабочем месте. Багажник всегда был сломан после слияния или регистрации.

Мы настроили машина непрерывной интеграции , которая выполняет очистку примерно за 45 минут по сравнению с примерно 2 часами на компьютере разработчика. Сервер интеграции опрашивает репозиторий SVN каждые 2 часа для новой проверки. и начинает делать чистку.

Таким образом, мы можем точно отслеживать, когда сборка была нарушена, и сразу же исправить ее. Мы используем Hudson в качестве нашего сервера непрерывной интеграции, его бесплатный и открытый исходный код, произведение искусства и очень простое в настройке. Плюс пользовательский интерфейс очень интуитивно понятен, все остальные разработчики любят его.

Приветствия

2 голосов
/ 27 октября 2008

Канонический способ решения этой проблемы - позволить компилятору автоматически генерировать для вас информацию о зависимостях. Примерно так (предполагая, что gcc, вы захотите проверить ваш компилятор на похожие параметры)

SOURCES=foo.c bar.c

%.d: %.c
    $(CC) $(CFLAGS) -MM $< >$@ 

include $(SOURCES:.c=.d)

В руководстве по GNU Make есть глава о , автоматически генерирующая предпосылки .

РЕДАКТИРОВАТЬ: я обычно рекомендую людям начать использовать CMake , когда у них есть такая проблема.

...