Создать Makefile из исходного кода и исполняемого файла? - PullRequest
1 голос
/ 28 июля 2011

У меня есть большая кодовая база, которая прекрасно работает, используя старую пользовательскую систему сборки, собранную вместе с использованием набора сценариев bash и простых рекурсивно комбинированных Make-файлов.

Как я могу воссоздать систему сборки, используя современную версию GNU make? (Или какой-то другой инструмент.)

База кода большая, разбита на множество подкаталогов и имеет нетривиальные зависимости между подпапками и требования к системной библиотеке.

Так как я могу собрать набор исполняемых файлов с поддержкой отладки, используя текущую систему сборки, то есть ли способ проанализировать эти файлы, чтобы создать новый набор правил сборки и компоновки?

Спасибо

Ответы [ 2 ]

3 голосов
/ 28 июля 2011

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

Запустите ваши make-файлы под GNUMake, если вы этого еще не сделали.Постепенно очищайте их, объединяйте их, впитывайте в них функции скриптов bash.Составьте схему этих «нетривиальных взаимных зависимостей подпапок»;посмотрите, как Make обрабатывает зависимости, и когда вы почувствуете это, попробуйте Advanced Auto-Dependency Generation в песочнице с одной стороны;Поначалу это немного сложно понять, но как только вы начнете использовать его, вам это понравится.

У вас может возникнуть соблазн просто оставить достаточно хорошо в одиночестве.Ведь система сборки работает как есть.Проблема в том, что он балансирует на пределе Шварцшильда.Прямо сейчас вы можете очистить это - это будет нелегко, но это будет в ваших силах.Но если вы этого не сделаете, небольшие изменения в кодовой базе потребуют небольших изменений в системе сборки, всегда добавляя, а не уменьшая.Система сборки будет увеличиваться в размерах и сложности, работа по очистке будет постепенно усложняться, пока она не выйдет за пределы вашего горизонта, после чего вы не сможете уменьшить беспорядок быстрее, чем он вырастет (и все равно делать все остальное).вещи, которые вы должны сделать).Это известный анти-паттерн .

0 голосов
/ 14 августа 2018

Два метода, которые я использовал, чтобы заставить GNU make делать любые виды самоанализа, были:

  • для статического анализа зависимости GNU make: вставлять флаги "-d -p" в существующие (работающие) создает процессы, а затем обрабатывает вывод с помощью awk / sed / python для генерации графов вызовов с выводом graphviz / dot.
  • для динамического анализа GNU make process / target: используйте «make SHELL = ~ bin / make_introspect».sh ", который может обнаруживать и отправлять записи (такие как командные строки, цели, идентификаторы процессов, рецепты) на границах, где make-файлы вызывают рецепты, а make-файлы вызывают другие make-файлы

Извините за общий характерответ, до сих пор я никогда не обобщал эти методы, просто использовал их в конкретных проектах

...