Autoconf
GNU Autoconf是一個在Bourne shell下製作供編譯、安裝和打包軟件的組態指令碼的工具[2]。Autoconf並不受程式語言限制,常用於C、C++、Erlang和Objective-C。組態指令碼控制了一個軟件套件在特定系統上的安裝。在進行一系列測試後,組態指令碼從模板中生成makefile與標頭檔進而調整軟件套件,使之適應某一種系統。Autoconf與Automake、Libtool等軟件組成了GNU構建系統[3]。Autoconf由戴維·麥肯思於1991年夏天編寫用於支持他在自由軟件基金會的編程工作[4]。此後,Autoconf包含了多人編寫的改進代碼並成為了使用最廣泛的自由編譯組態軟件。[5][6]
開發者 | GNU |
---|---|
目前版本 |
|
原始碼庫 | |
作業系統 | 跨平台 |
類型 | 編程工具 |
特許條款 | GPL |
網站 | http://www.gnu.org/software/autoconf/ |
使用概要
編輯軟件開發者通過使用GNU m4語言在configure.ac中寫出限定組態指令碼行為的列表。Autoconf將configure.ac中的命令轉化為對應特定平台的組態指令碼。Autoconf本身並不具備編譯能力,它僅僅用於產生通常附帶在軟件套件中的組態指令碼。
configure.ac格式
編輯The GNU Autoconf手冊建議configure.ac file使用如下格式:
- Autoconf requirements
- The AC_PREREQ(version)macro can be used to ensure that a recent enough version of the autoconf program is available to process the configure.ac file
- AC_INIT(package, version, bug-report-address)
- This macro is required in every configure.ac file. It specifies the name and version of the software package for which to generate a configure script and the email address of the developer.
- information on the package
- checks for programs
- checks for libraries
- checks for header files
- checks for types
- checks for structures
- checks for compiler characteristics
- checks for library functions
- checks for system services
- AC_CONFIG_FILES([file...])
- AC_OUTPUT
工作原理
編輯autoconf類似於perl使用的metaconfig包。先前X window系統所使用的imake系統與autoconf是密切相關,但有不同的理念。
autoconf通過檢查特性而不是軟件版本來確保可移植性。例如Sun OS 4的原生C編譯器不支援ISO C,但是用戶或管理員可以自行安裝支援ISO C的編譯器。基於軟件特性的檢查方法可以發現僅檢查軟件版本的方法檢測不到的支援ISO C的編譯器。因此組態指令碼可以在未知的或者較新的系統中得到合理的結果,同樣允許管理員按照他們的系統來組態指令碼。
批評
編輯autoconf是一個古老和成熟的產品,如果使用得當,可以使用一個非常簡單的介面進行複雜的交叉編譯。但是有一些批評指出autoconf使用了過時的技術,因而遺留了很多限制。autoconf無法為Xcode與Visual Studio製作專案檔案,其指令碼通常大且複雜,因此增加了Debug的難度。Autoconf所使用的M4對於一些開發者來說是陌生的,因此他們需要專門學習[7]。一些開發者並不遵循組態指令碼的一些習慣約定[8]。
因此一些自由軟件開發者開始使用其他軟件代替autoconf,KDE於KDE 4起開始使用CMake[9],Scribus同樣開始使用CMake[9]。
參見
編輯註腳
編輯- ^ autoconf-2.72 released [stable]. 2023年12月22日 [2023年12月25日].
- ^ Autoconf - GNU Project - Free Software Foundation (FSF). GNU Project. [2010-12-16]. (原始內容存檔於2010-12-23).
- ^ The GNU Build System - Autoconf. GNU Project. [2010-12-16]. (原始內容存檔於2010-12-25).
- ^ David Mackenzie. Genesis - Autoconf. GNU Project. [2010-12-16]. (原始內容存檔於2010-12-25).
- ^ David Mackenzie. Leviticus - Autoconf. GNU Project. [2010-12-16]. (原始內容存檔於2010-12-25).
- ^ David Mackenzie. Numbers - Autoconf. GNU Project. [2010-12-16]. (原始內容存檔於2010-12-25).
- ^ McCall, Andrew. Stop the autoconf insanity! Why we need a new build system. 2003-06-21 [2010-12-14]. (原始內容存檔於2010-12-27).
- ^ GNU Coding Standards. [2010-12-14]. (原始內容存檔於2010-12-23).
- ^ 9.0 9.1 Neundorf, Alexander. Why the KDE project switched to CMake -- and how. 2006-06-21 [2010-12-14]. (原始內容存檔於2011-05-07).
外部連結
編輯- GNU Autoconf home page(頁面存檔備份,存於互聯網檔案館)
- GNU Autoconf macro archive(頁面存檔備份,存於互聯網檔案館)
- The Goat Book homepage (aka the Autobook)(頁面存檔備份,存於互聯網檔案館)
- Murray Cumming(of gtkmm fame)produced these succinct Autotool info pages:*one *two.
- Autotoolset home page(頁面存檔備份,存於互聯網檔案館)
- https://web.archive.org/web/20140816060326/http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool
教程
編輯- https://web.archive.org/web/20100627142047/http://mi.eng.cam.ac.uk/~er258/code/autoconf/
- Learning Autoconf and Automake" by Eleftherios Gkioulekas
- Learning the GNU development tools @sourceforge(頁面存檔備份,存於互聯網檔案館)
- Autotools Tutorial(頁面存檔備份,存於互聯網檔案館) by Alexandre Duret-Lutz introduces Autoconf, Automake, Libtool,和Gettext
- Using GNU auto{conf,make,header}(頁面存檔備份,存於互聯網檔案館) by Felipe Bergo