LINUX.ORG.RU

грамотный Makefile


0

0

Как написать грамотный Makefile? Так чтобы при make пересобирался весь проект. Сейчас столкнулся с проблемой что при внесении изменений в один из сишный файлов проекта make пишет что цели не требуют обновления и не компилит... приходится пересобирать из сомандной строки руками... А в идеале, подскажите ссылку на подробную документацию по Make так как те обрывочные сведения которые нахожу в инете не помогают решить проблему


man make info make

cvv ★★★★★
()

Читать про gcc -M

anonymous
()

грамотный Makefile - это всегда искусство ;-)
... и особенно если это касается "dependencies".
Есть такая программа, как "makedepend" from XFree86
(поищи в google), которую мы (http://root.cern.ch) пользуем.

Лучше всего воспользоваться, чьим-либо опытом
(своровать чужой Makefile).

С autotools действительно, если можно, то лучше не связываться.

carrot
()

bobych (11.01.2005 14:48:16):

> Сейчас столкнулся с проблемой что при внесении изменений в один из сишный файлов проекта make пишет что цели не требуют обновления и не компилит...

man makedepend

Если не хочешь связываться с заморочками стандартных заголовков, поставь -Y

Я обычно указываю такие опции:

-w20 -Y -s '# ******** DEPENDENCIES: *********'

Die-Hard ★★★★★
()
Ответ на: комментарий от carrot

> ... и особенно если это касается "dependencies". > Есть такая программа, как "makedepend" from XFree86

чем вам не нравится gcc'шные -M* флаги?

> которую мы (http://root.cern.ch) пользуем.

нда, уже наверно весь ЛОР знает, что вы там используете :)

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

> А когда нужно прибегать к automake?

Имхо, autotools стоит использовать в том случае, если проект имеет либо довольно сложную структуру, когда приходиться слишком много париться при написании Makefile'ов, либо если нужно использовать какие-то внешниые либы, либо если много опций компиляции (т.е. типа ./configure --enable-foo, etc) а также если требуется проверять наличие каких-либо функций в системе (AC_CHECK_FUNCS()) и т.п.

autotools мне не нравятся, я вижу их глючными и недостаточно удобными, хотя альтернативы не знаю.

Всё это имхо конечно ;)

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

Novel (11.01.2005 18:31:01):

> чем вам не нравится gcc'шные -M* флаги?

Ну, мои makefile'ы обычно ориентированы на множество компиляторов и платформ, gcc -- одна из опций. Конечно, gcc почти везде стоит, но, как показывает практика, иногда он стоит криво.

makedepend тоже есть везде, и результаты получаются теми же.

Die-Hard ★★★★★
()

autotools пользуюсь, проект сложный, не знаю как было бы, если бы всем пришлось руками править Makefiles. Проблемы с этим всеравно были, когда захотелось все эти makefile.am & configure.in, etc... перенести на достаточно древнюю систему, где автотулсы были старыми... ЖОПА. Обратная совместимость = 0.

LX ★★
()
Ответ на: комментарий от Die-Hard

> Ну, мои makefile'ы обычно ориентированы на множество компиляторов и платформ, gcc -- одна из опций. Конечно, gcc почти везде стоит, но, как показывает практика, иногда он стоит криво.

Я ни с чем кроме gcc@Linux/*BSD не копался, так что ничего не могу сказать по этому поводу :)

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

> нда, уже наверно весь ЛОР знает, что вы там используете :)

ссылка дана, как пример в какую сторону надо смотреть ..
мне очень нравится build-system ROOTa. Еще один хорощий пример - Qt.
В свое время пришлось поработать с разными, включая autotools.
Вообще, тут у нас (в High Energy Physics), этот велосипед
изобретают постоянно - SRT, CMT, SCRAM ... все пытаются написать
систему автоматического генерирования Makefilов, чтобы облегчить
жизнь usera. В итоге ... как говорят у них на западе "pain in the ass"

carrot
()
Ответ на: комментарий от bugmaker

>Можно узнать, почему так?

autotools - это "еще один язык", который подчас не упрощает,
а усложняет жизнь. Почти, все, что могут autotools достигается
другими, более простыми средствами. Пример, ROOT и Qt.

Лично меня, очень огорчило, то, что последние версии не являются
"backward compatible" со старыми.

carrot
()
Ответ на: комментарий от Novel

>gnu autotools - это зло, и без нужды к нему прибегать не надо.

да да конечно - так говорят те кто им не поьлзовался и плохо знает =)

Проще всего сделать следующее

создать configure.in , и где надо Makefile.am и нет проблем, плюс скриптик вроде autogen.sh написать - если что могу подробней написать - писать вручную скрипты configure и/или Makefile есть большой изврат.

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

> да да конечно - так говорят те кто им не поьлзовался и плохо знает

Киса, я написал довольно много своих проектов с использованием autotools и ещё больше чистил скрипты от Linux-измов различных открытых проектов, так что имею представление о том, что говорю.

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

вспомнился еще один случай "из жизни Makefileов".
Под M$ Windows (VC) важно не только "отчего зависит",
но и "в каком порядке" ... это из цикла
"с чего начинается Ж."

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

>Под M$ Windows (VC) важно не только "отчего зависит", >но и "в каком порядке" ... это из цикла >"с чего начинается Ж."

Под офтопиком всегда все через Ж, пкакая разница вообще в каком порядке? линкер потом все слинкует ...

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

>пкакая разница вообще в каком порядке

я имею ввиду порядок линковки.
VC linker работает по-другому, чем gcc-шный.
например, получаемая DLL не содержит "unresolved symbols"

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