如何防止 automake 覆蓋 INSTALL?
我正在開發一個具有自定義
INSTALL
文件的項目。執行automake --add-missing
(或更準確地說,autoreconf -i
)將生成 GNU 預設INSTALL
文件,並用它覆蓋我們的文件。如何防止這種行為?我希望它要麼根本不生成 GNU
INSTALL
文件,要麼用不同的名稱創建它。另外,我不想禁用
automake
可能生成的任何其他文件。**編輯1:**來自
automake
手冊:如果
--add-missing
給出選項,automake
將添加INSTALL
文件的通用版本以及COPYING
包含目前版本 GNU 通用公共許可證文本的文件$$ … $$. 但是,現有
COPYING
文件永遠不會被automake
.
COPYING
它說不會覆蓋現有文件,但沒有說明該INSTALL
文件的任何內容,因此似乎它將被無條件覆蓋。**編輯2:**根據要求,這是我的
configure.ac
andMakefile.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
問題的原因是
-f
ie--force
標記為autoreconf
.它的手冊頁指出:“考慮所有文件已過時”,這有點含糊,所以我最初無法將它與我的問題聯繫起來。它的 html 手動輸入更具誤導性:
甚至重新製作
configure
比其輸入文件更新的腳本和配置標頭檔(configure.ac
並且,如果存在的話aclocal.m4
)。它只討論配置腳本,但實際上它也處理標準 GNU 文件。
事實證明,
autoreconf -f
實際上是呼叫automake --force-missing
,它有一個更明確的描述:“強制更新標准文件”,其 html 手動輸入使其更加清晰:與 一起使用時
--add-missing
,會導致重新安裝標准文件,即使它們已經存在於原始碼樹中。$$ … $$
從呼叫中刪除
-f
標籤解決了這個問題。autoreconf
**結論:**工作的人
autoreconf
不會寫手動條目。工作的人automake
可以。
將
foreign
選項添加到AM_INIT_AUTOMAKE
inconfigure.ac
。這將告訴 autotools 您沒有遵循 GNU 編碼標準,並且 Automake 不會創建通常的 GNU 項目文本文件,包括 AUTHORS、COPYING、INSTALL、NEWS、README 和 ChangeLog 文件。這些文件的自動創建實際上是相當無用的。您始終可以自己創建它們。