2012-09-27 85 views
0

我有一组不同的项目,都共享一组共同的C++库。目前这些常见的库被复制到每个代码库中,但这对我来说已经成为一个主要问题。我们使用Subversion进行版本控制,因此我计划将公共库更改为一组svn外部。Automake可以包含多个Makefile.am吗?

一旦我这样做,但我需要一种方法来做一个父/子Makefile.am或一些方法来自动合并Makefile.ams在一起。这可能吗?我知道SUBDIR的功能,但我试图避免递归使。

+0

为什么你必须避免递归make的任何具体原因? –

+0

按照本文http://aegis.sourceforge.net/auug97.pdf。递归make也会减慢我们的构建,因为它们无法并行运行。 – chotchki

+0

但是,如果我必须使用一个递归,那么我会这样做,如果这是需要的。 – chotchki

回答

1

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

您的公共库看起来会有自己的configure.acMakefile.am,并且可能会在noinst_LIBRARIES下定义该库。

您使用该库的项目将不得不通过svn外,进口的东西这样你的公共库:

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意味着它只会静态链接到事物中,但从未安装在文件系统中。

+0

谢谢,这种方法工作得很好! – chotchki

相关问题