2012-03-05 82 views
2

我想爲使用C++的Linux製作簡單的3D遊戲添加一些動態庫(.so文件)。這些動態庫用於使用Bullet物理引擎。使用automake和autoconf包括動態庫

我對如何使用automake和autoconf等知識非常有限,所以任何幫助將不勝感激。

如何修改下列任何文件以包含這些動態庫?

這裏是我的makefile.am:

noinst_HEADERS= BaseApplication.h Physics.h GameApplication.h 

bin_PROGRAMS= OgreApp 
OgreApp_CPPFLAGS= -I$(top_srcdir) 
OgreApp_SOURCES= BaseApplication.cpp Physics.cpp GameApplication.cpp 
OgreApp_CXXFLAGS= $(OGRE_CFLAGS) $(OIS_CFLAGS) 
OgreApp_LDADD= $(OGRE_LIBS) $(OIS_LIBS) 

EXTRA_DIST = buildit makeit 
AUTOMAKE_OPTIONS = foreign 

這裏是我的configure.ac:

AC_INIT(configure.ac) 
AM_INIT_AUTOMAKE(SampleApp, 0.1) 
AM_CONFIG_HEADER(config.h) 

AC_LANG_CPLUSPLUS 
AC_PROG_CXX 
AM_PROG_LIBTOOL 

PKG_CHECK_MODULES(OGRE, [OGRE >= 1.2]) 
AC_SUBST(OGRE_CFLAGS) 
AC_SUBST(OGRE_LIBS) 

PKG_CHECK_MODULES(OIS, [OIS >= 1.0]) 
AC_SUBST(OIS_CFLAGS) 
AC_SUBST(OIS_LIBS) 

AC_CONFIG_FILES(Makefile) 
AC_OUTPUT 

我也有一個buildit文件,設置在運動中的一切:

#!/bin/sh 
rm -rf autom4te.cache 
libtoolize --force --copy && aclocal && autoheader && automake --add-missing --force-missing --copy --foreign && autoconf 
./configure && ./makeit 
+0

您的buildit腳本太複雜。不要明確地調用libtoolize,aclocal等。相反,只需調用autoreconf -i – 2012-03-05 21:44:56

+0

您對AC_INIT的使用過於陳舊。在現代的autoconf中,AC_INIT應該有3個參數:項目名稱,版本,聯繫點。你使用的是什麼版本的autoconf? – 2012-03-05 21:46:14

+0

AM_PROG_LIBTOOL不應再使用。改用LT_INIT。 – 2012-03-05 21:56:26

回答

0

在您的Makefile.am

OgreApp_LIBADD= -llib1 -llib2 

這有幫助嗎?

編輯:或嘗試追加-llib1 -llib2OgreApp_LDADD=...線,我不知道我自己。

+0

嘗試OgreApp_LDADD會導致錯誤。將文件添加到LDADD,如下所示:OgreApp_LDADD = $(OGRE_LIBS)$(OIS_LIBS)/usr/local/lib/libBulletCollision.so /usr/local/lib/libBulletDynamics.so /usr/local/lib/libBulletMultiThreaded.so results in無法在項目符號中包含樣本頭文件 – daedalic 2012-03-05 01:40:25

2

對於子彈,應該有安裝在您的系統上的文件bullet.pc您可以用autocong宏觀PKG_CHECK_MODULES使用,以同樣的方式OGRE和OIS包括:

# in configure.ac 
PKG_CHECK_MODULES(BULLET, [bullet]) 

# in Makefile.am 
OgreApp_CXXFLAGS= $(OGRE_CFLAGS) $(OIS_CFLAGS) $(BULLET_CFLAGS) 
OgreApp_LDADD= $(OGRE_LIBS) $(OIS_LIBS) $(BULLET_LIBS) 


如果添加了更多無條件的依賴關係,你可能想通過將它們分組這樣可以簡化這兩個文件:

# in configure.ac 
PKG_CHECK_MODULES(DEPENDENCIES, [OGRE >= 1.2 OIS >= 1.0 bullet]) 

# in Makefile.am 
OgreApp_CXXFLAGS= $(DEPENDENCIES_CFLAGS) 
OgreApp_LDADD= $(DEPENDENCIES_LIBS) 

正如傑克·凱利在評論中寫道,如果你有pkg配置> = 0.24(2010年發佈),你不」 t需要使用在PKG_CHECK_MODULE之後的。

+1

不要'AC_SUBST'由'PKG_CHECK_MODULES'設置的變量,它已經爲您完成了。 – 2012-03-05 13:18:06