Autotools

自動工具:程式碼片段 (AM_MAINTAINER_MODE)

  • October 13, 2018

至於這個程式碼片段:

AM_MAINTAINER_MODE
if test "x$enable_maintainer_mode" = xyes; then
   AC_PATH_PROG(PERL,perl)
   if test -z "$PERL"; then
       AC_MSG_ERROR([perl not found])
   fi
fi

# This should be checked before AC_PROG_CC
if test "x$CFLAGS" = x; then
   default_CFLAGS=yes
fi

if test "x$host_cpu" = xx86_64; then
   CFLAGS="-m32 $CFLAGS"
fi

我找不到關於正在測試的三個變數的任何資訊(x $ enable_maintainer_mode, x $ CFLAGS,x$host_cpu)。這些變數是在執行宏 AM_MAINTAINER_MODE 後生成的嗎?如果是這樣,我在哪裡可以找到有關它們的更多資訊?

另外,AM_MAINTAINER_MODE 模式的目的是什麼?

據我了解,預設情況下它是禁用的:

  • 如果使用者執行“配置”並且不滿足所有依賴項(Automake 版本、工具、庫等),它將終止並且不會繼續進行。
  • 如果使用者執行“configure”並且滿足所有依賴項,它會創建並執行生成“make”文件的 config.status 腳本
  • 使用者可以使用 –enable-maintainer-mode 選項覆蓋此設置。這將允許他們修改​​不同的 Autotool 文件(例如 configure.ac、Makefile.am),並且建構系統將嘗試重新生成需要更新的文件以反映這些更改(Autotools 將查找任何過時的文件並更新它們因此)。

我明白為什麼禁用此模式可能更可取。您為什麼要啟用此功能?

背後的總體構想AM_MAINTAINER_MODE是使用兩種處理項目的方式:一種是使用者“僅”想要建構和安裝項目(使用基於源的工件進行安裝),並且可能在不觸及其建構的情況下更改項目的程式碼系統,另一個是使用者希望在項目中任何地方所做的任何更改都反映在建構輸出中。

因此,當禁用時,即使更改了相應的源文件(等),也不會重建諸如等AM_MAINTAINER_MODE文件。這樣做的好處是它避免了要求使用者擁有必要的建構工具,並且避免了必須自己處理工具的更改(詢問任何嘗試使用目前自動工具重建舊的、複雜的項目的人)。缺點是對某些文件所做的更改會被忽略,因此使用者需要確保手動更新所有適當的文件……(這就是為什麼您在 Internet 上看到的許多更新檔都包含更改*,*有時甚至.)configure``Makefile.in``configure.ac``Makefile.am``Makefile.am Makefile.in``Makefile

啟用的優點AM_MAINTAINER_MODE是對文件所做的所有更改都會被考慮在內。缺點是使用者需要知道真正的源文件是什麼:如果您對Makefile.in維護者模式進行更改和重建,您可能會失去所做的更改!

現在普遍的共識似乎是,從真實來源重建更好,而維護者模式並不是一個好主意。(automake FAQ提供了參考資料。)這並不意味著所有使用者突然需要擁有重建一切所需的所有工具;如果一個項目在其發布工件中發布生成的文件,只要時間戳是好的,那麼使用者就不需要重建它們。

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