Да. Хороший софт. Помнится мне приходилось собирать почивший в бозе MarsNWE. Так прежде чем его Makefile был нормально скушан, его пришлось в течении nnого времени обрабатывать sed'ом и awk'ом...
идея что make наилучшим образом подходит для сборки чего хошь — это разновидность довольно общего мозгового вируса.
симптомы поражения мозга вирусом выглядят примерно так: если существует некий "стандартный" инструмент, заявленной целью существования которого является автоматизация работы типа X, то значит все работы типа X можно считать по сути одинаковыми, тривиальными и подлежащими автоматизации с помощью данного инструмента.
А, может, в консерватории что-нибудь подправить? :) Тулзы хорошие, но не самые простые. Кто, например, должен разбираться с версиями библиотек, с которыми нужно линковаться?
?! там разборка-то примитивная. Если не самая последняя версия нужна, а конкретная - нужно макро внести соответсвующий (по имени не помню, но в доках всё есть).
А так, в принципе - /usr/lib/lib.so -> /usr/lib/lib.so.latest.version. Это POSIX конвенция.
Я как раз хотел написать, что по сравнению с autotools make ещё ничего, но меня, вижу, уже опередили. Впрочем, запущенных случаев много - взять, к примеру, sendmail... С другой стороны, я не уверен, что задача, поставленная перед autotools, вообще решается по-человечески в общем случае.
В общем, везде. Правда, я решил ту конкретную проблему, которая мне надоедала.
Проблема была связана с тем, что сложный набор make-файлов, который строит мой проект и который я не могу менять, добавлял в стандартный список макро-определений командной строки для компилятора что-то вроде -D$(FOO), где FOO - переменная, в которой хранится версия некоего продукта. После того, как недавно этот продукт начал использовать версию типа BAR3.5 (а не BAR1, BAR2, BAR3, как было раньше), make начал передавать компилятору в командной строке -DBAR3.5, на что компилятор ругается следующими словами:
<command line>: warning: ISO C requires whitespace after the macro name
потому что точка не может быть частью имени макроопределения, и поэтому он считает, что имя - BAR3, значение - ".5", а то, что между ними нет проблема - вызывает ругань.
Меня эта ругань про компиляции каждого файла в большом проекте достала, и я полез разбираться, обнаружил вышеописанное, и пошёл читать документацию gmake, чтобы понять, как можно убрать эту гадость, которая мне нафиг не нужна, из моей командной строки, не меняя огромный набор make-файлов, который её туда пихает. Результат: в Makefile своего проекта добавить, после include'ов на этот огромный набор,
Я разве сказал, что плохой? Я сказал, что смеялся сквозь слёзы.
Над всей этой навороченной ad-hoc кучей невнятного, неинтуитивного синтаксиса, эзотерических комбинаций служебных символов, ни с чем не совместимых собственных расширений, постоянной путаницы с переменными среды, и прочих прелестей.
Толя, прости, но ты не прав. Уродство Makefile начинается там, где совершенно непонимающий принцип работы make человек изобретает велосипед.
Еще одна деталь: Makefile != Project file. Цель Makefile - указывать на последовательную взаимосвязь модулей. Вторичная цель - собирадь модули в кучу, пользуясь уже определенной взаимосвязью. Все остальные применения - изобретения "умельцев". Что ж поделаешь если GNU make очень уж "открыт" для разного рода издевательств?
И последнее. Насчет автотулзов. Они примитивны, как пять копеек. Просто надо прочесть документацию (хотя бы по диагонали). В большинстве случаев я начнинаю проект именно с автотулзов. В этом вся соль - начинать надо по человечески, иначе потом очень долго придется мучатся. В принципе там нужно ДВА файла создать и внести в них определения. Далее все происходит автоматически. А если хочется (ну очень) что-то свое добавить (что редко требуется) - вперед в m4.
Кстати - о последнем. С тех пор, как я преодолел "образовательный барьер" во всем что касается m4 (в частности благодоря автотулзам) я вообще не понимаю, зачем люди пишут СВОИ моторы обработки шаблонов... И себя не понимаю, когда вижу какую-то муть, написаную 3-4 года назад:))))
всей этой навороченной ad-hoc кучей невнятного, неинтуитивного синтаксиса, эзотерических комбинаций служебных символов, ни с чем не совместимых собственных расширений
1) define с точкой вообще не дружит. 2) командная строка GCC поддерживается очень условно и не считается стандартной (в отличии от параметров среды, кстати говоря, которые и надо бы использовать в таких случаях). (А, да, это таки командная строка GCC, а не make, если уж на то пошло - MAKE просто слепо передает то, что ему пишут). 3) информацию о версии лучше передавать автоматически генерируемым include, который включается на уровне пре-процессора во все файлы.
Самое весёлое там - это существование некоторых вещей и в виде директив и в виде функций. Причём первые парзятся один раз при загрузке, а вторые при выполнении, что при случайном использовании одного вместо другого в некоторых комбинациях даёт наизабавнейшие результаты. Из документации это не очевидно и я как-то день потратил над одни Makefile, пока это понял.
А в остальном - вполне неплохой инструмент. Не сложнее тех же regexp'ов, которые незнакомому человеку тоже могут чем-то абсолютно нечитаемым показаться.
no subject
Date: 2005-04-21 09:54 am (UTC)В Symbian SDK все до сих пор собирается с помощью perl-скриптов :)
no subject
Date: 2005-04-21 10:00 am (UTC)no subject
Date: 2005-04-21 10:20 am (UTC)no subject
Date: 2005-04-21 10:10 am (UTC)no subject
Date: 2005-04-21 10:16 am (UTC)симптомы поражения мозга вирусом выглядят примерно так: если существует некий "стандартный" инструмент, заявленной целью существования которого является автоматизация работы типа X, то значит все работы типа X можно считать по сути одинаковыми, тривиальными и подлежащими автоматизации с помощью данного инструмента.
no subject
Date: 2005-04-21 10:25 am (UTC)Конечно, нет! Для сборки чего хошь наилучшим образом подходит коллекция из autoconf + autoheader + automake + aclocal + make.
Мыло и верёвка - опциональны.
no subject
Date: 2005-04-21 10:28 am (UTC)безнадёжно запущеный случай, в общем.
no subject
Date: 2005-04-21 11:37 am (UTC)Тулзы хорошие, но не самые простые. Кто, например, должен разбираться с версиями библиотек, с которыми нужно линковаться?
no subject
Date: 2005-04-21 11:54 am (UTC)А так, в принципе - /usr/lib/lib.so -> /usr/lib/lib.so.latest.version. Это POSIX конвенция.
no subject
Date: 2005-04-21 11:52 am (UTC)Я конечно понимаю, что приятно порассуждать о том, что молоток никуда не годится в качестве разводного ключа...
no subject
Date: 2005-04-21 12:05 pm (UTC)я понимаю, но утрирую.
autotools, на самом деле, являются такой фиговиной вроде Перла: они весьма полезны для решения задач, которых не должно быть.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:ObRant
Date: 2005-04-23 10:58 am (UTC)С другой стороны, я не уверен, что задача, поставленная перед autotools, вообще решается по-человечески в общем случае.
no subject
Date: 2005-04-21 10:25 am (UTC)no subject
Date: 2005-04-21 10:36 am (UTC)Проблема была связана с тем, что сложный набор make-файлов, который строит мой проект и который я не могу менять, добавлял в стандартный список макро-определений командной строки для компилятора что-то вроде -D$(FOO), где FOO - переменная, в которой хранится версия некоего продукта. После того, как недавно этот продукт начал использовать версию типа BAR3.5 (а не BAR1, BAR2, BAR3, как было раньше), make начал передавать компилятору
в командной строке -DBAR3.5, на что компилятор ругается следующими словами:
<command line>: warning: ISO C requires whitespace after the macro name
потому что точка не может быть частью имени макроопределения, и поэтому он считает, что имя - BAR3, значение - ".5", а то, что между ними нет проблема - вызывает ругань.
Меня эта ругань про компиляции каждого файла в большом проекте достала, и я полез разбираться, обнаружил вышеописанное, и пошёл читать документацию gmake, чтобы понять, как можно убрать эту гадость, которая мне нафиг не нужна, из моей командной строки, не меняя огромный набор make-файлов, который её туда пихает. Результат: в Makefile своего проекта добавить, после include'ов на этот огромный набор,
FOODEFINES := $(filter-out -D$(FOO),$(FOODEFINES))
Заработало.
no subject
Date: 2005-04-21 11:25 am (UTC)GNU make, может, и плохой (я бы сказал, что не идеальный), но зато он есть, и делает все, что от него требуется.
no subject
Date: 2005-04-21 11:33 am (UTC)Над всей этой навороченной ad-hoc кучей невнятного, неинтуитивного синтаксиса, эзотерических комбинаций служебных символов, ни с чем не совместимых собственных расширений, постоянной путаницы с переменными среды, и прочих прелестей.
no subject
Date: 2005-04-21 11:49 am (UTC)Еще одна деталь: Makefile != Project file. Цель Makefile - указывать на последовательную взаимосвязь модулей. Вторичная цель - собирадь модули в кучу, пользуясь уже определенной взаимосвязью. Все остальные применения - изобретения "умельцев". Что ж поделаешь если GNU make очень уж "открыт" для разного рода издевательств?
И последнее. Насчет автотулзов. Они примитивны, как пять копеек. Просто надо прочесть документацию (хотя бы по диагонали). В большинстве случаев я начнинаю проект именно с автотулзов. В этом вся соль - начинать надо по человечески, иначе потом очень долго придется мучатся. В принципе там нужно ДВА файла создать и внести в них определения. Далее все происходит автоматически. А если хочется (ну очень) что-то свое добавить (что редко требуется) - вперед в m4.
Кстати - о последнем. С тех пор, как я преодолел "образовательный барьер" во всем что касается m4 (в частности благодоря автотулзам) я вообще не понимаю, зачем люди пишут СВОИ моторы обработки шаблонов... И себя не понимаю, когда вижу какую-то муть, написаную 3-4 года назад:))))
no subject
Date: 2005-04-21 11:50 am (UTC)Кстати, а какие альтернативы?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2005-04-21 11:55 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:а где у нас тут gcc
From:Re: а где у нас тут gcc
From:за неровный почерк
From:спасибо!
From:(no subject)
From:(no subject)
From:no subject
Date: 2005-04-23 11:16 am (UTC)Это вы про Perl говорили? ;)
no subject
Date: 2005-04-21 12:02 pm (UTC)2) командная строка GCC поддерживается очень условно и не считается стандартной (в отличии от параметров среды, кстати говоря, которые и надо бы использовать в таких случаях). (А, да, это таки командная строка GCC, а не make, если уж на то пошло - MAKE просто слепо передает то, что ему пишут).
3) информацию о версии лучше передавать автоматически генерируемым include, который включается на уровне пре-процессора во все файлы.
no subject
Date: 2005-04-21 12:49 pm (UTC)(no subject)
From:no subject
Date: 2005-04-21 12:14 pm (UTC)no subject
Date: 2005-04-21 11:46 am (UTC)А в остальном - вполне неплохой инструмент. Не сложнее тех же regexp'ов, которые незнакомому человеку тоже могут чем-то абсолютно нечитаемым показаться.
no subject
Date: 2005-04-25 10:04 am (UTC)