我有一組不同的項目,都共享一組共同的C++庫。目前這些常見的庫被複制到每個代碼庫中,但這對我來說已經成爲一個主要問題。我們使用Subversion進行版本控制,因此我計劃將公共庫更改爲一組svn外部。Automake可以包含多個Makefile.am嗎?
一旦我這樣做,但我需要一種方法來做一個父/子Makefile.am或一些方法來自動合併Makefile.ams在一起。這可能嗎?我知道SUBDIR的功能,但我試圖避免遞歸使。
我有一組不同的項目,都共享一組共同的C++庫。目前這些常見的庫被複制到每個代碼庫中,但這對我來說已經成爲一個主要問題。我們使用Subversion進行版本控制,因此我計劃將公共庫更改爲一組svn外部。Automake可以包含多個Makefile.am嗎?
一旦我這樣做,但我需要一種方法來做一個父/子Makefile.am或一些方法來自動合併Makefile.ams在一起。這可能嗎?我知道SUBDIR的功能,但我試圖避免遞歸使。
我打算假設你在這裏使用靜態庫,因爲它使事情變得更簡單。
您的公共庫看起來會有自己的configure.ac
和Makefile.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意味着它只會靜態鏈接到事物中,但從未安裝在文件系統中。
謝謝,這種方法工作得很好! – chotchki
爲什麼你必須避免遞歸make的任何具體原因? –
按照本文http://aegis.sourceforge.net/auug97.pdf。遞歸make也會減慢我們的構建,因爲它們無法並行運行。 – chotchki
但是,如果我必須使用一個遞歸,那麼我會這樣做,如果這是需要的。 – chotchki