2016-04-19 41 views
0

我試圖讓我的項目與automake構建。特別是在使用Allegro5時。我應該如何鏈接通常與pkg-config鏈接的automake庫?

我可以使用下面的命令就好

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配置鏈接?

+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'得到這些庫的列表,然後我會按照這個問題的答案。當我下班回家時,我將必須這樣做。 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是否有動態告訴你哪些路徑/標誌使用。 它意味着被動態地使用,而不是在你的開發機器上運行它,然後copy'n'paste到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 

它可能是在你的設置,整個快板,富不需要任何特殊的編譯器標誌,但它也可能需要一些。因此我的示例還爲您的程序設置了編譯器標誌(mygame_CXXFLAGS)。 終於,它擺脫了不必要的CLEANFILES

此外,你可以去自動工具的路線,並使用PKG_CHECK_MODULES宏放在configure.ac

+0

感謝您的提示。下班回家時我會試試看。 – DeepDeadpool