Проверка зависимостей - как очистить проект от плохих make-файлов

StackOverflow https://stackoverflow.com/questions/240061

Вопрос

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

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

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

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

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

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

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

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

Заранее благодарю...

-Адам

Это было полезно?

Решение

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

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

Другие советы

комбинация автоматического создания и автоконференции:

http://sources.redhat.com/automake/automake.html#Introduction

Еще:

http://sources.redhat.com/automake/automake.html#Why-Autotools

HTH

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

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

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

Ваше здоровье,

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

SOURCES=foo.c bar.c

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

include $(SOURCES:.c=.d)

В руководстве GNU Make есть глава о автоматическое создание предварительных условий.

Редактировать:Обычно я рекомендую людям начать использовать СМейк когда у них возникают такого рода проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top