Как упаковать файлы данных с помощью GNU autoconf и automake - PullRequest
7 голосов
/ 11 февраля 2012

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

1 Ответ

15 голосов
/ 12 февраля 2012

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

/
|->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");

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

...