c++ - 使用 automake 和 autoconf 包含动态库

标签 c++ linux makefile autoconf automake

我正在尝试为我在 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

最佳答案

对于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.24(2010 年发布),则无需在 PKG_CHECK_MODULE 之后使用 AC_SUBST >.

关于c++ - 使用 automake 和 autoconf 包含动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9560377/

相关文章:

c++ - Gnuplot - 每秒更新图表

linux - CMake:如何在 add_custom_command(...) 中使用 if 条件

make 中的条件编译标志

c - Makefile 无法在子文件夹中找到文件

c++ - 语法错误 "=="

python - ctypes 中 64 位 dll 的持续溢出错误

c++ - p = array 是否与 p = &array[0] 相同?

c++ - 为什么 boost.geometry.index.rtree 比 superliminal.RTree 慢

linux - 为什么我们在 Linux 服务器上安装 git 时要为程序(如 git)创建一个新用户?

c - linux内核中的划分