Как упаковать файлы данных с помощью autoconf и automake GNU

Я довольно новый программист на С++. Я сделал очень простую игру, используя библиотеки SDL. Моя игра, естественно, использует некоторые изображения, звуки и шрифты. Я хотел сделать дистрибутив пакета, где пользователь может настроить && make . Не то чтобы эта простая игра стоила распространения, но я хочу узнать, как работают autoconf и automake. Я искал примеры в Интернете, но учебники, которые я смог найти, показывают только установку простой программы helloworld. Они не говорят ни об установке файлов данных, ни о том, как проверить, существуют ли определенные библиотеки, чтобы я мог ссылаться на них во время компиляции. Кроме того, моя программа должна знать, где устанавливается каждый файл, чтобы она могла их загрузить. Я углубился в руководства по automake и autoconf, но они больше похожи на справочные материалы, чем на ресурс для новичков. Может ли кто-нибудь кратко объяснить эти концепции или привести меня в какое-то место, где я мог бы прочитать о них.


person yasar    schedule 11.02.2012    source источник
comment
Я обнаружил, что лучший способ использовать autoconf/automake — это найти проект, похожий на ваш, посмотреть, что они делают, и работать с документацией.   -  person James McLaughlin    schedule 11.02.2012
comment
Ознакомьтесь с книгой о козлах, чтобы получить более удобочитаемое введение в автоинструменты. У них есть несколько примеров проектов разной сложности, которые показывают, как делать самые распространенные вещи с помощью автоинструментов.   -  person ldav1s    schedule 11.02.2012
comment
Выглядит многообещающе. Я смотрю на это.   -  person yasar    schedule 11.02.2012
comment
Вы можете посмотреть книгу Джона Калькота Autotools: Практическое руководство по GNU Autoconf, Automake и Libtool.   -  person William Pursell    schedule 12.02.2012


Ответы (1)


Я провел некоторое исследование по этому поводу и хотел поделиться тем, что сработало для меня. Я создал такую ​​структуру каталогов:

/
|->src/
|   |-> Makefile.am
|   |-> main.cpp
|   |-> functions.cpp
|
|-> data/
|   |-> Makefile.am
|   |-> somethings.png
|   |-> something.mp3
|-> configure.ac
|-> README
|-> NEWS, AUTHORS etc. etc.

Я поместил все свои изображения, шрифты, звуки и т. д. в папку данных. Makefile.am в папке с данными выглядит так:

pkgdata_DATA = esound.wav \
               another.wav \
               apicture.png

Он просто перечисляет все файлы, которые должны оказаться в каталоге данных. Makefile.am в папке src выглядит так:

bin_PROGRAMS = mygame
mygame_SOURCES = main.cpp functions.cpp
AM_CPPFLAGS = -DDATADIR=\"$(pkgdatadir)\"

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

background = load_image( DATADIR "/background.png");

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

person yasar    schedule 11.02.2012
comment
Следует ли вам использовать dist_pkgdata_DATA, если вы хотите его распространять? - person Kemin Zhou; 23.06.2017