LINUX.ORG.RU

Makefile пакета

 , ,


0

1

Привет! Может, кто делал и знает, как полегче настроить компиляцию-линковку кодов из git-хабов? В моем случае готовое к установке (./configure-make-make install) успешно скачано и установлено. Теперь хотелось бы залезть в код, но встают вопросы с настройкой компиляции отдельных файлов проекта и вообще пониманием того, что в этот проект входит. Так же хотелось бы выделить линковку в отдельную цель. Ранее делал просто анализом «нечеловеческого» Makefile (обычно, он является результатом autoconfig утилит) из поставки. Но с «большими» приложениями не сталкивался. Сейчас большое, а главное - не очень понятное. Может есть какая утилитка для упрощения жизни на этом этапе?

запуск make и осуществляет компиляцию и линковку.

что именно в нем не устраивает? и причем тут пакеты и рефакторинг?

waker ★★★★★
()
Ответ на: комментарий от waker

Waker, я писал «компиляция отдельных файлов». Предолженный вами способ использования пакетного Makefile будет перелопачивать все файлы проекта каждый раз. Или я ошибаюсь? Пакеты при том, что переход от «исходных кодов со скриптом configure» к пакетам (типа deb или rpm) - это одна утилита. Если подскажете, как называть исходные коды, подготовленные к компиляции и установке с использованием стандартной процедуры (configure - make - make install), то буду использовать предложенный вами вариант. Если он будет точнее и понятнее, конечно. Просто «исходный код» (как обычно говорят) думаю не подходит. Здесь хотел подчеркнуть тип исходного кода с которым имею дело. Надеюсь, эти уточнения помогают.

aquanaut
() автор топика
Ответ на: комментарий от aquanaut

Предолженный вами способ использования пакетного Makefile будет перелопачивать все файлы проекта каждый раз. Или я ошибаюсь?

он вычислит какие файлы изменились, и перекомпиляет только их.

Пакеты при том, что переход от «исходных кодов со скриптом configure» к пакетам (типа deb или rpm) - это одна утилита.

нет. с чего вдруг она одна?

Если подскажете, как называть исходные коды, подготовленные к компиляции и установке с использованием стандартной процедуры (configure - make - make install), то буду использовать предложенный вами вариант.

результат стандартной процедуры «configure - make - make install» - это собранная и установленная программа. типично это называют «бинарники» (хотя там и не только они).

waker ★★★★★
()
Ответ на: комментарий от aquanaut

configure не надо делать второй раз, тогда (в подавляющем большинстве случаев) make без аргументов перекомпилит только то что нужно. Но бывают пакеты, где в Makefile всунута ещё куча логики (кроме собственно компиляции), там всё сложнее. Если повезёт - найдёшь таки таргет (аргумент к make) который сделает что нужно (возможно - не в корневой директории исходников), если не повезёт - разбирай вручную.

firkax ★★★★★
()
Ответ на: комментарий от waker

waker, checkinstall позволяет создавать как deb, так и rpm пакеты, поэтому может использоваться не только в Ubuntu. Вместо make install выполните $ checkinstall затем просто установите получившийся пакет с помощью dpkg. Она одна и работает, но как обычно - не всегда… я писал не про результат стандартной процедуры, а про «пререквизит» для нее - то есть исходники.

В общем, разобрались с вопросом. Ответ такой:

  1. Используем makefile из поставки пакета, если он грамотный (99.9% таких) и проверяет готовность цели, готовые цели не перекомпилирует и не перелинковывает.

  2. Если makefile из поставки пакета не очень, то выбираем строки из всех makefile-ов пакета, в которых встречаются расширения исходных кодов (в моем случае *.с) и методом пристального вглядывания понимаем, что там делается с исходниками. Так получаем общий состав пакета и идеи по написанию своего makefile.

aquanaut
() автор топика
Ответ на: комментарий от firkax

firkax, спасибо! Да. У меня куча makefile-ов в поддиректориях директории src. Там как обычно черт ногу сломит… За идею с повторным запуском configure - отдельно спасибо!

aquanaut
() автор топика
Ответ на: комментарий от firkax

firkax, а можно об этом подробнее? Что за правило? Искать значит не только *.c, но и *.o, если есть? Или как?

aquanaut
() автор топика
Ответ на: комментарий от aquanaut

Если есть правило про линковку бинарника из *.o, но нет правил как сделать эти *.o, то make сам поищет соответствующие *.c (и все остальные языки которые он знает) и попытается применить к ним компилятор. Детали (какая именно командная строка там будет в запуске компилятора, какие языки он знает и где всё это настраивается) - лучше смотри в документации (ищи: make implicit rules), если нужно (но суть не меняется: правила с упоминанием .c может и не быть).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)

офтоп конечно, но что-то навеяло «Может есть какая утилитка для упрощения жизни на этом этапе?»

можно ли собрать make без make?

это кстати про всякие Xmake тянущие за собой звездолёт в любой проект

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

да. там когда-то был адомикс из шела и перла ))) Хотя ет было наверное лет 15 назад. Хз че там щя…

Jetty ★★★★★
()
Последнее исправление: Jetty (всего исправлений: 1)

и вообще пониманием того, что в этот проект входит

файлы исходников обычно перечислены в Makefile.am файлах, если используются autotools

Harald ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.