包括使用automake和autoconf的动态库

Including dynamic libraries using automake and autoconf

本文关键字:动态 autoconf automake 包括使      更新时间:2023-10-16

我正在尝试为一个使用C++在linux上制作的简单3D游戏添加一些动态库(.so文件)。这些动态库用于使用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

这是我的配置。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

我还有一个构建文件,可以设置所有的动态:

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

对于Bullet,您的系统上应该安装一个Bullet.pc文件,可以与自动配置宏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.24(2010年发布),则不需要在PKG_CHECK_MODULE之后使用AC_SUBST

在您的Makefile.am:中

OgreApp_LIBADD= -llib1 -llib2

这有帮助吗?

编辑:或者尝试将-llib1 -llib2附加到OgreApp_LDADD=...行,我自己也不确定。