包括使用automake和autoconf的动态库 我试图把一些动态库(.so文件)包含在一个简单的3D游戏中,我用C++在Linux上做游戏。这些动态库用于使用Bullet物理引擎

包括使用automake和autoconf的动态库 我试图把一些动态库(.so文件)包含在一个简单的3D游戏中,我用C++在Linux上做游戏。这些动态库用于使用Bullet物理引擎,c++,linux,makefile,autoconf,automake,C++,Linux,Makefile,Autoconf,Automake,我对如何使用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 Game

我对如何使用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
附加到
ogrepa_LDADD=…
行,我自己也不确定。

对于Bullet,您的系统上应该安装一个Bullet.pc文件,可以与自动编码宏
PKG_CHECK_模块一起使用,包括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)

正如Jack Kelly在评论中写道的那样,如果您的pkg config>=0.24(2010年发布),那么在
pkg\u检查模块

尝试OGREPA\u LDADD后,您不需要使用
AC\u SUBST
。像这样将文件添加到LDADD:ogrepa_LDADD=$(OGRE_LIBS)$(OIS_LIBS)/usr/local/libBulletCollision.so/usr/local/lib/libBulletDynamics.so/usr/local/lib/libBulletMultiThreaded.so导致无法包含bulletDon't
AC_SUBST
PKG\u CHECK\u模块设置的变量的示例头文件,已经为您完成了。您的buildit脚本太复杂了。不要显式调用libtoolize、aclocal等。相反,只需调用autoeconf-y您对AC_INIT的使用已经非常过时了。在现代autoconf中,AC_INIT应该包含3个参数:项目名称、版本、联系人。您使用的是什么版本的autoconf?不应再使用AM_PROG_LIBTOOL。改用LT_INIT。