0

我有一组不同的项目,它们都共享一组通用的 C++ 库。目前这些通用库被复制到每个代码库中,但这对我来说是一个主要问题。我们使用 subversion 进行版本控制,所以我计划将公共库更改为一组 svn 外部。

一旦我这样做了,尽管我需要一种方法来制作父/子 Makefile.am 或某种方法来自动将 Makefile.ams 合并在一起。这可能吗?我知道 SUBDIR 功能,但是我试图避免递归生成。

4

1 回答 1

2

我将假设您在这里使用静态库,因为它使事情变得更简单。

您的公共库看起来有自己的configure.acand Makefile.am,并且可能在noinst_LIBRARIES.

您使用该库的项目将通过 svn external 导入您的公共库,如下所示:

foo/
foo/configure.ac
foo/Makefile.am
foo/...
foo/libcommon/
foo/libcommon/configure.ac
foo/libcommon/Makefile.am
foo/libcommon/...

在 foo'sconfigure.ac中,添加对AC_CONFIG_SUBDIRS([libcommon]). 在 foo'sMakefile.am中,添加SUBDIRS = libcommon. 除了这一层之外, foo 和 libcommon 都可以是非递归的。在 foo'sMakefile.am中,您将添加类似LDADD = libcommon/libcommon.a. 您可能还需要添加类似AM_CPPFLAGS = -I$(srcdir)/libcommon/include.

然后,当你配置 foo 时,它会配置 libcommon 并构建它。该库被声明为 noinst 的事实意味着它只会静态链接到事物中,而不会安装在文件系统中。

于 2012-09-29T10:50:04.943 回答