2012-02-11 6 views
6

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

+0

Я нашел, что лучший способ пойти с autoconf/automake - найти проект, похожий на ваш собственный, посмотреть, что он делает, и работать там с документацией. –

+0

Возможно, вам стоит взглянуть на книгу Джона Калькота «Autotools: Руководство для переводчика по GNU Autoconf, Automake и Libtool» –

+0

Попробуйте [Козловую книгу] (http://sourceware.org/autobook/) для более читаемого введения в Autotools. У них есть несколько проектов различной сложности, которые показывают, как делать самые распространенные вещи с помощью autotools. – ldav1s

ответ

13

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

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

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

+0

Должен ли использоваться dist_pkgdata_DATA, если вы хотите его распространять? –