2016-04-19 19 views
0

Ich versuche mein Projekt mit automake baubar zu machen. Speziell bei der Verwendung von Allegro5.Wie sollte ich Bibliotheken in Automake verknüpfen, die normalerweise mit pkg-config verbunden sind?

Ich kann meinen Code mit dem folgenden Befehl gerade fein

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) 

Aber mein Makefile wird nicht funktionieren bauen.

Hier ist mein 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 

Und hier ist mein configure.ac

AC_INIT(bayou, 0.1.0) 
AM_INIT_AUTOMAKE 

AC_LANG_CPLUSPLUS 
AC_PROG_CXX 
LT_INIT 

AC_OUTPUT(
    Makefile \ 
    src/Makefile\ 
) 

Rennen meinen ersten Befehl funktioniert gut. Lauf make gibt mir

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

Wie sollte ich meine configure.ac und Makefile.am ist, so kann ich Bibliotheken verwende ich normalerweise mit pkg-config verknüpfen?

+0

Ich glaube, ich fand heraus, wie mit dem Befehl -L und -lallegro einzurichten. Ich werde '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_primitiven-5.0 allegro_ttf-5.0 zu Holen Sie sich eine Liste der Bibliotheken, dann werde ich der Antwort dieser Frage folgen. Ich werde das tun müssen, wenn ich von der Arbeit nach Hause komme. http://stackoverflow.com/questions/6560760/how-do-i-link-allegro-5-from-my-makefile – DeepDeadpool

Antwort

-1

Meine Führung in dem Vorschlag funktionierte. Ich habe nicht meine configure.ac ändern (obwohl ich wahrscheinlich sollte, so kann ich erwartete Pakete installiert sind Verify)

Wie dem auch sei, lief ich pkg-config <insert libs from comment here> in einem Terminal-Fenster, das die folgende Ausgabe

-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 
gab

Also meine neue Makefile.am sieht aus wie

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 

ich möchte die Akademie und meine Eltern danken für mich durch diese schwierige Zeit zu sehen. Sie haben mir so viel bedeutet! * Schläge Küsse

0

pkg-config ist es, Ihnen dynamisch zu sagen, welche Pfade/Flags zu verwenden. Es soll dynamisch verwendet werden, anstatt es auf Ihrem Entwicklungscomputer auszuführen und es dann in das Makefile zu kopieren und dann zu erwarten, dass es auf jedem Bereitstellungscomputer ausgeführt wird.

Hier ist eine aktualisierte Makefile.am, basierend auf Ihrer eigene Antwort:

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 

es könnte, dass die gesamten allegro-foo benötigen keinen speziellen Compiler-Flags in Ihrem Setup, aber es könnte genauso gut brauche etwas. Daher setzt mein Beispiel auch die Compiler-Flags für Ihr Programm (mygame_CXXFLAGS). endlich, es ist los von der nicht benötigten CLEANFILES.

Auch könnten Sie die Autotools Weg gehen, und verwenden Sie die PKG_CHECK_MODULES Makro in Ihrem configure.ac

+0

Danke für den Tipp. Ich werde es ausprobieren, wenn ich von der Arbeit nach Hause komme. – DeepDeadpool