LINUX.ORG.RU

Хитрости и тонкости использования autotools

 


1

1

Всем привет. Недавно, при очередной попытке осилить истинно верную систему автосборки, обнаружил, что если в Makafile.am в переменной libname_la_SOURCES указать просто шаблон типа *.c, то итоговая библиотека корректно собрана не будет. Но это же маразм, перечислять все стопицот файлов, которые могут у меня быть в составе проекта. А как обычно поступаете вы? Какие бывают еще засады и как вы их решаете?

//Обходные пути для слабаков, типа CMake или qmake не предлагать :)

Всем спасибо.

★★★★★

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

истинно верную систему автосборки

Бросай ее. cmake кошерней. Я бы даже сказал, она кошерно-халяльная ☺

Eddy_Em ☆☆☆☆☆
()

А как обычно поступаете вы?

Берешь вывод find -name '*.c' -printf '%P\n' и вставляешь его в эту самую libname_la_SOURCES. Все компоненты сборки должны быть перечислены. Собирать «все файлы лабораторной работы с раширением *.c из текущей директории» ты замечательно можешь хоть наколенным shell-скриптом, для нормального проекта такое просто недопустимо.

Грабли, на которые часто наступают - не перечисляют заголовочные файлы в этих самых _SOURCES переменных. Если этого не сделать, то они не войдут в архив, создаваемый по make dist.

Другие грабли связаны с использованием VCS: вывод autoconf и automake ни в коем случае не должен лежать в VCS. Там должен быть только configure.ac (или .in - кому как нравится называть), Makefile.am и набор своих макросов. Конфигурационного файла (обычно config.h и config.h.in) тоже не должно быть в VCS.

Любителей ох*нного леса директорий также ждет разочарование: лучше написать один большой makefile, чем разрываеть логически единые единицы сборки по директориям. Т. е. если у тебя есть свои noinst_LIBRARIES, которые используются при сборке, это разумно каждую из библиотек собирать отдельным Makefile'ом, но если твой продукт разбросан по каталогам model/ view/ controller/, лучше иметь единый Makefile.am в каталоге верхнего уровня.

Ну и главный совет: проще всего начинать не с «чтения мануалов», а взять какой-то opensource проект, которому нужен сильно похожий на твой набор библиотек и творчески позаимствовать оттуда configure.in/ac скрипт.

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

про хедеры не согласен с аноном их не в _SOURCES надо. есть же pkginclude_HEADERS либо include_HEADERS если надо, чтобы они по make install устанавливались (например, -devel пакеты делать) и noinst_HEADERS если только в make dist

aol ★★★★★
()

указать просто шаблон типа *.c

разве где-то в документации automake сказано, что такие шаблоны в нём поддерживаются?

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

Зря ты недооцениваешь cmake

cmake для ниосиляторов, autotools - стандарт де-факто. Мне лично нравится, что autotools-driven софт ведет себя стандартно, а cmake'овое (а также скунсовое, кумейковое и прочие бяки) ведут себя так, как посчитает нужным аффтар.

Если я хочу запаковать собранный проинсталлированный образ в архив для последующей распаковки где-то, с automake у меня есть DESTDIR. Для работы не в /usr/local autoconf скрипты имеют параметр --prefix. В цемейках и скунсах это остается «на усмотрение аффтара», потому что оба проекта были сделаны неосиляторами для неосиляторов. Пишешь гнутый софт, твой выбор autotools.

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

наредкость адекватный анон в этой ветке! бешено плюсую этот камент: Хитрости и тонкости использования autotools (комментарий)

если разберешься в автотулзах, не будешь так категоричен. иначе не надо фразу «мне лень/некогда/whatever» заменять на «cmake рулит» ;)

<offtop>как дела с stm?</offtop>

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

<offtop>как дела с stm?</offtop>

Пока забил: чертежи черчу.

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