Automake可以包含多个Makefile.am吗?

时间:2012-09-27 14:42:59

标签: autotools automake

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

一旦我这样做,虽然我需要一种方法来制作父/子Makefile.am或某种方式自动合并Makefile.ams。这可能吗?我知道SUBDIR功能,但我试图避免递归make。

1 个答案:

答案 0 :(得分:2)

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

您的公共图书馆看起来有自己的configure.acMakefile.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的configure.ac中,添加对AC_CONFIG_SUBDIRS([libcommon])的调用。在foo的Makefile.am中,添加SUBDIRS = libcommon。除了这一级别外,foo和libcommon都可以是非递归的。在foo的Makefile.am中,您可以添加LDADD = libcommon/libcommon.a之类的内容。您可能还需要添加AM_CPPFLAGS = -I$(srcdir)/libcommon/include

之类的内容

然后,当你配置foo时,它将配置libcommon并构建它。将库声明为noinst这一事实意味着它只会静态链接到事物中,但从未安装在文件系统中。