2012-09-27 116 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

相關問題