Я пытаюсь собрать свой проект с помощью automake. В частности, при использовании Allegro5.

Я могу создать свой код, используя следующую команду.

g++ -std=c++0x *.cpp -o mygame $(pkg-config --libs allegro-5.0 \
allegro_acodec-5.0 allegro_audio-5.0 allegro_color-5.0 allegro_dialog-5.0 \
allegro_font-5.0 allegro_image-5.0 allegro_main-5.0 allegro_memfile-5.0 \
allegro_physfs-5.0 allegro_primitives-5.0 allegro_ttf-5.0)

Но мой Makefile не работает.

Вот мой src / Makefile.am

bin_PROGRAMS = mygame

AM_CXXFLAGS = "-std=c++0x"

mygame_SOURCES = Animation.cpp Body.cpp GameObject.cpp Menu.cpp Vector3.cpp \
    Arena.cpp Button.cpp Keyboard.cpp Mesh.cpp Assets.cpp Character.cpp \
    main.cpp Mouse.cpp Barrier.cpp Environment.cpp Manager.cpp TitleMenu.cpp

mygame_LDADD = allegro-5.0 allegro_acodec-5.0 allegro_audio-5.0 \
    allegro_color-5.0 allegro_dialog-5.0 allegro_font-5.0 allegro_image-5.0 \
    allegro_main-5.0 allegro_memfile-5.0 allegro_physfs-5.0 \
    allegro_primitives-5.0 allegro_ttf-5.0

CLEANFILES = mygame *.o

А вот и мой configure.ac

AC_INIT(bayou, 0.1.0)
AM_INIT_AUTOMAKE

AC_LANG_CPLUSPLUS
AC_PROG_CXX
LT_INIT

AC_OUTPUT(
    Makefile \
    src/Makefile\
)

Выполнение моей первой команды отлично работает. Запуск make дает мне

make: *** No rule to make target `allegro-5.0', needed by 'mygame'.  Stop.

Итак, как мне настроить мои configure.ac и Makefile.am, чтобы я мог использовать библиотеки, которые я обычно связываю с помощью pkg-config?

1
DeepDeadpool 19 Апр 2016 в 05:12

2 ответа

Лучший ответ

Моя подсказка в предложении сработала. Мне не нужно было изменять свой configure.ac (хотя, вероятно, я должен был бы проверить, что ожидаемые пакеты установлены)

В любом случае, я запустил pkg-config <insert libs from comment here> в окне терминала, что дало следующий результат

-L/usr/local/lib -lallegro_acodec -lallegro_audio -lallegro_color 
-lallegro_dialog -lallegro_image -lallegro_main -lallegro_memfile 
-lallegro_physfs -lallegro_primitives -lallegro_ttf -lallegro_font
-lallegro

Итак, мой новый Makefile.am выглядит как

bin_PROGRAMS = mygame

AM_CXXFLAGS = "-std=c++0x"

mygame_SOURCES = Animation.cpp Body.cpp GameObject.cpp Menu.cpp Vector3.cpp \
    Arena.cpp Button.cpp Keyboard.cpp Mesh.cpp Assets.cpp Character.cpp \
    main.cpp Mouse.cpp Barrier.cpp Environment.cpp Manager.cpp TitleMenu.cpp

mygame_LDADD = -Lusr/local/lib -lallegro_acodec \
    -lallegro_audio -lallegro_color -lallegro_dialog -lallegro_image \
    -lallegro_main -lallegro_memfile -lallegro_physfs -lallegro_primitives \
    -lallegro_ttf -lallegro_font -lallegro

CLEANFILES = mygame *.o

Я хочу поблагодарить академию и моих родителей за то, что они провели меня в это тяжелое время. Они так много значили для меня! * посылает воздушные поцелуи

-1
DeepDeadpool 20 Апр 2016 в 01:52

pkg-config динамически сообщает вам, какие пути / флаги использовать. Он предназначен для использования динамически , а не для запуска на вашем компьютере разработки, а затем копирования и вставки в make-файл, а затем ожидает его запуска на любой машине развертывания.

Вот обновленный Makefile.am, основанный на вашем собственном ответе:

bin_PROGRAMS = mygame
AM_CXXFLAGS = "-std=c++0x"

PKGLIBS=allegro-5.0 \
    allegro_acodec-5.0 allegro_audio-5.0 allegro_color-5.0 allegro_dialog-5.0 \
    allegro_font-5.0 allegro_image-5.0 allegro_main-5.0 allegro_memfile-5.0 \
    allegro_physfs-5.0 allegro_primitives-5.0 allegro_ttf-5.0
mygame_CXXFLAGS = $(shell pkg-config --cflags $(PKGLIBS)) $(AM_CXXFLAGS)
mygame_LDADD = $(shell pkg-config --libs $(PKGLIBS))


mygame_SOURCES = Animation.cpp Body.cpp GameObject.cpp Menu.cpp Vector3.cpp \
    Arena.cpp Button.cpp Keyboard.cpp Mesh.cpp Assets.cpp Character.cpp \
    main.cpp Mouse.cpp Barrier.cpp Environment.cpp Manager.cpp TitleMenu.cpp

Может случиться так, что в вашей настройке весь allegro-foo не нуждается в каких-либо специальных флагах компилятора, но он также может нуждаться в некоторых. поэтому мой пример также устанавливает флаги компилятора для вашей программы (mygame_CXXFLAGS). наконец, избавился от ненужных CLEANFILES.

Кроме того, вы можете пойти по маршруту autotools и использовать макрос PKG_CHECK_MODULES в своем { {X1}}

0
umläute 20 Июн 2016 в 10:51