【发布时间】:2012-03-05 00:48:00
【问题描述】:
我正在尝试为我在 Linux 上使用 C++ 制作的简单 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
这是我的 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
【问题讨论】:
-
你的 buildit 脚本太复杂了。不要显式调用 libtoolize、aclocal 等。相反,只需调用 autoreconf -i
-
您对 AC_INIT 的使用已经过时了。在现代 autoconf 中,AC_INIT 应该采用 3 个参数:项目名称、版本、联系点。您使用的是什么版本的 autoconf?
-
AM_PROG_LIBTOOL 不应再使用。请改用 LT_INIT。
标签: c++ linux makefile autoconf automake