使用automake和autoconf包括动态库
我想为使用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
在您的Makefile.am
:
OgreApp_LIBADD= -llib1 -llib2
这有帮助吗?
编辑:或尝试追加-llib1 -llib2
到OgreApp_LDADD=...
线,我不知道我自己。
尝试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
对于子弹,应该有安装在您的系统上的文件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
之后的。
不要'AC_SUBST'由'PKG_CHECK_MODULES'设置的变量,它已经为您完成了。 – 2012-03-05 13:18:06
您的buildit脚本太复杂。不要明确地调用libtoolize,aclocal等。相反,只需调用autoreconf -i – 2012-03-05 21:44:56
您对AC_INIT的使用过于陈旧。在现代的autoconf中,AC_INIT应该有3个参数:项目名称,版本,联系点。你使用的是什么版本的autoconf? – 2012-03-05 21:46:14
AM_PROG_LIBTOOL不应再使用。改用LT_INIT。 – 2012-03-05 21:56:26