我有一组不同的项目,它们都共享一组通用的 C++ 库。目前这些通用库被复制到每个代码库中,但这对我来说是一个主要问题。我们使用 subversion 进行版本控制,所以我计划将公共库更改为一组 svn 外部。
一旦我这样做了,尽管我需要一种方法来制作父/子 Makefile.am 或某种方法来自动将 Makefile.ams 合并在一起。这可能吗?我知道 SUBDIR 功能,但是我试图避免递归生成。
我将假设您在这里使用静态库,因为它使事情变得更简单。
您的公共库看起来有自己的configure.ac
and 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 的事实意味着它只会静态链接到事物中,而不会安装在文件系统中。