包括使用automake和autoconf的动态库

时间:2012-03-05 00:48:01

标签: c++ linux makefile autoconf automake

我正在尝试将一些动态库(.so文件)包含在我使用C ++在Linux上制作的简单3D游戏中。这些动态库用于使用Bullet物理引擎。

我对如何使用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

2 个答案:

答案 0 :(得分:2)

对于Bullet,系统上应该安装一个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)

正如Jack Kelly在评论中写道,如果你有pkg-config> = 0。04(2010年发布),你不需要在AC_SUBST之后使用PKG_CHECK_MODULE

答案 1 :(得分:0)

Makefile.am

OgreApp_LIBADD= -llib1 -llib2

这有帮助吗?

修改:或尝试将-llib1 -llib2附加到OgreApp_LDADD=...行,我不确定自己。