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