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