Gnu

如何防止 automake 覆蓋 INSTALL?

  • April 19, 2015

我正在開發一個具有自定義INSTALL文件的項目。執行automake --add-missing(或更準確地說,autoreconf -i)將生成 GNU 預設INSTALL文件,並用它覆蓋我們的文件。

如何防止這種行為?我希望它要麼根本不生成 GNUINSTALL文件,要麼用不同的名稱創建它。

另外,我不想禁用automake可能生成的任何其他文件。


**編輯1:**來自automake手冊

如果--add-missing給出選項,automake將添加INSTALL文件的通用版本以及COPYING包含目前版本 GNU 通用公共許可證文本的文件

$$ … $$. 但是,現有COPYING 文件永遠不會被automake.

COPYING它說不會覆蓋現有文件,但沒有說明該INSTALL文件的任何內容,因此似乎它將被無條件覆蓋。

**編輯2:**根據要求,這是我的configure.acand Makefile.am,也是autogen.sh我們執行到autoreconf項目的:

configure.ac:

AC_INIT([program name], [version number], [bug report], [short name], [url])
AC_CONFIG_SRCDIR([Main/Source/main.cpp])

AM_PROG_AS 
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_PROG_CXX

CFLAGS="$CFLAGS $SDL_CFLAGS "
LIBS="$LIBS $SDL_LIBS"
CPPFLAGS="$SDL_CFLAGS -DLINUX
         -DLOCAL_STATE_DIR=\\\"$sharedstatedir/<program name>\\\"
         -DDATADIR=\\\"$datadir\\\" -DUSE_SDL -DGCC"

AC_PROG_INSTALL
AC_PROG_RANLIB
AC_CONFIG_FILES(<list of Makefiles in subdirs>)
AC_OUTPUT

Makefile.am:

SUBDIRS = FooLib Main Bar Baz
EXTRA_DIST = LICENSING <and a bunch of unrelated files>

autogen.sh:

autoreconf -f -i

問題的原因是-fie--force標記為autoreconf.

它的手冊頁指出:“考慮所有文件已過時”,這有點含糊,所以我最初無法將它與我的問題聯繫起來。它的 html 手動輸入更具誤導性:

甚至重新製作configure比其輸入文件更新的腳本和配置標頭檔(configure.ac並且,如果存在的話aclocal.m4)。

它只討論配置腳本,但實際上它也處理標準 GNU 文件。

事實證明autoreconf -f實際上是呼叫automake --force-missing,它有一個更明確的描述:“強制更新標准文件”,其 html 手動輸入使其更加清晰:

與 一起使用時--add-missing,會導致重新安裝標准文件,即使它們已經存在於原始碼樹中。

$$ … $$

從呼叫中刪除-f標籤解決了這個問題。autoreconf

**結論:**工作的人autoreconf不會寫手動條目。工作的人automake可以。

foreign選項添加到AM_INIT_AUTOMAKEin configure.ac。這將告訴 autotools 您沒有遵循 GNU 編碼標準,並且 Automake 不會創建通常的 GNU 項目文本文件,包括 AUTHORS、COPYING、INSTALL、NEWS、README 和 ChangeLog 文件。這些文件的自動創建實際上是相當無用的。您始終可以自己創建它們。

引用自:https://unix.stackexchange.com/questions/197238