我想在我的Autotools項目中集成純標題C++庫。由於該庫使用Autoconf和Automake,因此我在configure.ac
中使用AC_CONFIG_SUBDIRS
,並在Makefile.am
中將庫dir添加到SUBDIRS =
行。在autotools項目中包含(僅標題)庫
我的問題是:如何防止由make install
安裝頭文件庫?我正在構建一個二進制文件,因此我的用戶不需要這些頭文件。
我不想篡改庫,所以我可以通過解壓縮新版本來獲取升級。
我想在我的Autotools項目中集成純標題C++庫。由於該庫使用Autoconf和Automake,因此我在configure.ac
中使用AC_CONFIG_SUBDIRS
,並在Makefile.am
中將庫dir添加到SUBDIRS =
行。在autotools項目中包含(僅標題)庫
我的問題是:如何防止由make install
安裝頭文件庫?我正在構建一個二進制文件,因此我的用戶不需要這些頭文件。
我不想篡改庫,所以我可以通過解壓縮新版本來獲取升級。
然後請不要使用SUBDIRS
。下面的技巧可以工作:
all-local: ${MAKE} -C thatlib all
當然,這將是最好的,如果庫留在自己的目錄你的項目之外,你只要通過CFLAGS/LIBS標誌指向它。
這是一個想法。
將您不想看到安裝的所有第三方庫移動到名爲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
,它將工作。它們在安裝軟件包時默認不會發生。
我很想保持它在我的樹外,但我試圖減少外部依賴。謝謝,會試試這個。 – 2010-11-30 22:01:50