autoconf安裝關于可移植的源代碼詳解
GNU Autoconf用于產生configure腳本,該腳本在編譯應用程序之前運行。configure腳本可以運行一系列開發者要求的測試以確定該軟件是否可以在一個特定環境中編譯。例如,它可以確定你的機器上安裝的(GNU或非GNU)C編譯器的版本,并確保某些標準C頭文件已準備好。它也可能會做一些更復雜的事情——GNU autoconf有著很大的靈活性。
GNU configure可以用于建立包含一個特定系統動態信息的頭文件,這些動態信息可用于源代碼測試。例如,一個編譯周期通常會創建一個頭文件config.h,它包含許多#define聲明對應已經經過測試的特征。如果GNU configure確定本地軟件環境適合編譯軟件,那么這些定義將有助于增加軟件的靈活性,因為它們允許在必要的時候進行條件代碼編譯。
你很快會意識到需要使用GNU configure,因為它將極大地簡化了你在Linux上的開發工作。
下面是一個configure.in的示例文件,configure腳本就是通過它生成的:
![]() |
你可以看到這個文件較短,而且只包含幾個命令(實際上都是一些宏,許多工具都是通過M4 宏處理器建立的,但并不影響這里的討論)。
configure.in文件以命令AC_PREREQ開頭,它要求Autoconf的***版本是2.59。因此,用于生成configure腳本的系統必須安裝了GNU Autoconf 2.59。其后的AC_INIT用于告訴Autoconf軟件包的名稱、版本和作者的電子郵件地址。隨后是一連串以AC開頭的命令,它們直接確定哪些特征和測試需要包含在configure腳本中。
你很快會了解到configure.in文件中其他行的含義。
這個示例文件中的主要Autoconf命令是:
AC_CANONICAL_SYSTEM:由Autoconf來確定是為主機編譯還是為另一個目標系統編譯,并在必要時處理交叉編譯 。
AC_CONFIG_SRCDIR:測試是否存在文件src/hello.c,如果沒有發現它,將大聲抱怨。這用于確保用戶是在正確的目錄位置下運行正確的腳本,等等。
AC_PROG_CC:測試是否存在C編譯器(例如,如果系統中安裝了GCC,它將檢測到它)。
AC_HEADER_STDC:測試標準C頭文件的可用性(在/usr/include目錄中)。
AC_C_BIGENDIAN:確定機器的字節序(詳見3.3節)——如果需要,這是你可以添加的眾多定制測試中的一個。
AC_CHECK_HEADERS:指定要測試的額外的系統頭文件。
AC_OUTPUT:指定GNU Autoconf運行之后將輸出的文件列表。在本例中,GNU Autoconf將導致在頂層目錄和子目錄src中生成Makefile文件。
configure腳本從configure.in文件中自動生成并基于可移植的shell代碼。這一點非常重要,因為要想知道任一給定的Linux或UNIX系統安裝的是哪種shell是非常困難(或不可能)的。雖然幾乎所有的Linux系統都會安裝bash,但既然存在這種可能性,我們還是值得提供這樣的靈活性。除非你決定編寫自己的configure測試,否則你不需要擔心要編寫自己的可移植shell代碼(如果真的需要,請查看Autoconf文檔)。
【編輯推薦】