2010-11-30 29 views
2

我想在我的Autotools項目中集成純標題C++庫。由於該庫使用Autoconf和Automake,因此我在configure.ac中使用AC_CONFIG_SUBDIRS,並在Makefile.am中將庫dir添加到SUBDIRS =行。在autotools項目中包含(僅標題)庫

我的問題是:如何防止由make install安裝頭文件庫?我正在構建一個二進制文件,因此我的用戶不需要這些頭文件。

我不想篡改庫,所以我可以通過解壓縮新版本來獲取升級。

回答

0

然後請不要使用SUBDIRS。下面的技巧可以工作:

 
all-local: 
     ${MAKE} -C thatlib all 

當然,這將是最好的,如果庫留在自己的目錄你的項目之外,你只要通過CFLAGS/LIBS標誌指向它。

+1

我很想保持它在我的樹外,但我試圖減少外部依賴。謝謝,會試試這個。 – 2010-11-30 22:01:50

2

這是一個想法。

將您不想看到安裝的所有第三方庫移動到名爲noinst/的子目錄中。因此,舉例來說,如果您想用Boost之類的工具發運您的項目,請將其解壓到目錄noinst/boost/。使用AC_CONFIG_SUBDIRS([noinst/boost])。裏面noinst/Makefile.am,做這樣的事情:

SUBDIRS = boost 
# Override Automake's installation targets with the command ":" that does nothing. 
install:; @: 
install-exec:; @: 
install-data:; @: 
uninstall:; @: 

的效果是,每當一些遞歸「make install的*」或「使卸載」命令從頂層目錄中運行,遞歸將在noinst/停止而不是訪問其子目錄。其他遞歸命令(如「make」,「make clean」或「make dist」)仍然會遞歸到子目錄中。

你當然可以覆蓋install:和朋友直接進入第三方包,並避免額外的noinst/目錄。但是如果你和我一樣,你不想篡改第三方軟件包來緩解他們的更新。 上述設置的一個不錯的屬性是,如果有人進入noinst/boost/並決定運行make install,它將工作。它們在安裝軟件包時默認不會發生。

1

只是碰到了類似的問題,發現在automake manual解決方案:

noinst_HEADERS將是正確的變量在使用目錄中僅包含標題和不相關的庫或程序

安德烈亞斯