Структура Makefile .... какая из них работает? - PullRequest
0 голосов
/ 31 января 2011

Я работаю в Ericsson RND и анализирую их make-файлы, написанные давно.Я даю команду make в директорию.Этот каталог имеет make-файл, который не содержит никаких зависимостей, правил и т. Д. Он просто включает

-include ./Makefile.local include make / def.mk include congif.mk

Когда я запускаюmake-файл через make all, он говорит

all

totalclean

и затем входит в каталог..подкаталог текущего каталога

Откуда мне знатьоткуда берется зависимость?где написаны правила для make all В make-файле также содержится имя подкаталогов, и эти подкаталоги являются каталогами, в которых моя make работает после totalclean.

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

Ответы [ 3 ]

1 голос
/ 31 января 2011

Чтобы найти правило all, просмотрите эти три файла: Makefile.local, make/def.mk и congif.mk. Если вы этого не видите, вы можете попробовать удалить директивы include из основного make-файла одну за другой, чтобы увидеть, когда перестанет работать «all». Вы можете искать правило totalclean таким же образом.

Скорее всего, сообщение "all" взято из правила all и "totalclean" из правила totalclean (но, как указывает jcomeau_ictx, не каждый, кто пишет make-файл, цивилизован - сообщения могут прийти откуда угодно и значат что угодно). Тот факт, что «totalclean» идет после «всего», говорит о том, что это рекурсия, а не зависимость.

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

EDIT:
Анкит, ты просишь простую формулу для сокращения ненужных зависимостей в большой устаревшей системе make-файлов; там просто нет одного. У нас недостаточно информации, чтобы дать вам подробные указания, но я сделаю снимок в темноте: похоже, что ваши make-файлы каждый раз запускаются totalclean и перестраиваются с нуля. Это почти всегда не нужно. Так что ищите звонок на totalclean и выключите его, посмотрите, не ускоряет ли это все.

EDIT:
Теперь у вас есть три проблемы: вы имеете дело с большой, плохо спроектированной системой make-файлов, вы новичок в make-файле, и менеджеры вмешиваются.

Да, используйте make -j .... Это может ускорить процесс и почти наверняка не сможет навредить. Вы можете попытаться объяснить чиновникам, что если вы запускаете totalclean каждый раз, вы должны затем перекомпилировать все, что вам нужно, и это устанавливает жесткий нижний предел времени сборки. Вы можете искать ненужные зависимости в make-файлах. Нет простого и быстрого способа сделать это, потому что машина не может знать, какие предпосылки действительно необходимы. Если вы понимаете процесс сборки для конкретной цели, посмотрите на правило и оцените, необходима ли каждая предпосылка. Если вы не уверены, вы можете удалить обязательное условие из правила, сделать totalclean, сделать цель, а затем сделать all; если целевая сборка не удалась, то предварительное условие было необходимо, если оно выполнено успешно, но сборка all не удалась, то предварительное условие необходимо, но оно должно быть в другом правиле.
1 голос
/ 31 января 2011

С GNU make вы можете сделать

make -pn

Чтобы получить список всех правил вместе с именем файла и номером строки для каждой команды.

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

#  commands to execute (from `build/build.mk', line 45):
0 голосов
/ 31 января 2011

MAKAO может быть полезным для вас. Позволяет распечатать график вызовов выполненной марки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...