2016-04-19 4 views
0

Я пытаюсь создать свой проект с помощью automake. В частности, при использовании Allegro5.Как связать библиотеки в automake, обычно связанные с pkg-config?

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

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 не будет работать.

Вот мой ЦСИ/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: *** No rule to make target `allegro-5.0', needed by 'mygame'. Stop. 

Так как я должен настроить свой configure.ac и Makefile.am так что я могу использовать библиотеки я обычно связывают с PKG-конфигурации?

+0

Я думаю, что я узнал, как настроить команду, используя -L и -lallegro. Мне нужно будет запустить 'pkg-config -libs allegro-5.0 allegro_acodec-5.0 allegro_audio-5.0 allegro_color-5.0 llegro_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' to получите список библиотек, затем я отвечу на этот вопрос. Я должен буду это сделать, когда приеду домой с работы. http://stackoverflow.com/questions/6560760/how-do-i-link-allegro-5-from-my-makefile – DeepDeadpool

ответ

-1

Мое руководство в предложении работало. Я не должен изменить свой 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 

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

0

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

Вот обновленный 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 

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

Кроме того, вы можете пойти по пути Autotools и использовать PKG_CHECK_MODULES макрос в вашем configure.ac

+0

Спасибо за подсказку. Я попробую, когда вернусь с работы. – DeepDeadpool