configure.ac (configure.in)詳解

轉(zhuǎn)載自:configure.ac (configure.in)詳解--鵬博客(http://www.ivpeng.com/pblog/configure-ac.html)

用自動生成Makefile的工具來生成Makefile的過程中表谊,需要用autoscan命令來生成configure.scan文件,然后將它改名字為configure.ac或者configure.in,然后就來更改其中的一些相關(guān)信息來完成下面需要完成的配置盖喷,那么這個configure.ac怎么來寫爆办?今天我們就將這個過程分開來和大家共同研究和探討下。

我們在生成的過程中會用autoconf命令來處理configure.ac/configure.in文件课梳,生成一個configure的腳本距辆。生成后的configure文件是一個可以移植的shell腳本,運行的時候它檢查編譯環(huán)境暮刃,來決定哪些庫是可以用的跨算,所用到的平臺有哪些個特征,那些個頭文件和庫是已經(jīng)找到的等等椭懊, 然后收集到的這些信息诸蚕,它修改編譯標(biāo)記,生成一個Makefile文件氧猬,同時生成一個包含已定義的預(yù)處理符號的config.h文件背犯。configure并不需要運行autoconf,所以我們在發(fā)布應(yīng)用程序之前生成這個文件盅抚,如此我們就不必有autoconf的軟件包了漠魏。

說了這么多現(xiàn)在應(yīng)該步入主題了,現(xiàn)在我們需要坐的就是寫一個configure.in文件泉哈。configure.in文件里基本的內(nèi)容就是一系列的m4宏蛉幸,在運行時根據(jù)傳遞給它們的參數(shù),定義的宏就會擴展為shell的腳本代碼段丛晦。也可以手工書寫shell代碼奕纫。不過我們就不說這個了,要想完全的理解configure.in怎樣寫烫沙,其實是要求有一些m4的知識匹层,還要一些 Bourneshell的知識。要這么多知識做基礎(chǔ)好難锌蓄,不過還好的的是升筏,有省事的方法,就是可以找一個已有的configure.in文件瘸爽,然后以此來修改它以適應(yīng)你所要完成的任務(wù)您访。如果想了解可以看看autoconf手冊,其中介紹了很多預(yù)先寫好的宏剪决。

下面我們就來通過一個簡單的configure.ac文件灵汪,來了解一些非常常用的宏和含義:

AC_INIT(src/hello.c)

AM_CONFIG_HEADER(config.h)

AM_INIT_AUTOMAKE(GnomeHello,0.1)

AM_MAINTAINER_MODE

AM_ACLOCAL_INCLUDE(macros)

GNOME_INIT

AC_PROG_CC

AC_ISC_POSIX

AC_HEADER_STDC

AC_ARG_PROGRAM

AM_PROG_LIBTOOL

GNOME_COMPILE_WARNINGS

ALL_LINGUAS=”es”

AM_GNU_GETTEXT

AC_SUBST(CFLAGS)

AC_SUBST(CPPFLAGS)

AC_SUBST(LDFLAGS)

AC_OUTPUT([

Makefile

macros/Makefile

src/Makefile

intl/Makefile

po/Makefile.in

pixmaps/Makefile

doc/Makefile

doc/C/Makefile

doc/es/Makefile

])

下面我們逐一對例子中的代碼進行一下解釋檀训,例子中以AC開頭的宏來自autoconf,以AM開頭的宏來自automake享言【欤可以從autoconf或 automake中尋求幫助,這一點很有用览露。以GNOME開頭的宏來自于Gnomemacros目錄荧琼。這些宏都是用m4宏語言寫的。如果將 autoconf和automake安裝在/usr目錄下差牛,autoconf和automake中的標(biāo)準(zhǔn)宏一般放在/usr/share/aclocal 目錄下命锄。

AC_INIT總是configure.in中的第一個宏。它擴展為許多可由其他configure腳本共享的模板文件代碼偏化。這些代碼解析傳到 configure中的命令行參數(shù)累舷。這個宏的一個參數(shù)是一個文件名,這個文件應(yīng)該在源代碼目錄中夹孔,它用于健全性檢查被盈,以保證configure腳本已正確定位源文件目錄。

AM_CONFIG_HEADER指定了要創(chuàng)建的頭文件搭伤,差不多總是config.h只怎。創(chuàng)建的頭文件包含由configure定義的C預(yù)處理符號。最低限度應(yīng)該定義PACKAGE和VERSION符號怜俐,這樣可以將應(yīng)用程序名稱和版本傳送到代碼中身堡,而無須對它們硬編碼(非公用的源文件應(yīng)該包含 config.h(#include)以利用這些定義。然而拍鲤,不要將config.h文件安裝到系統(tǒng)中贴谎,因為它有可能與其他的軟件包沖突)。

AM_INIT_AUTOMAKE初始化automake季稳。傳到這個宏里的參數(shù)是要編譯的應(yīng)用程序的名稱和版本號(這些參數(shù)成為config.h中定義的PACKAGE和VERSION值)擅这。

AM_MAINTAINER_MODE關(guān)閉缺省時僅供程序維護者使用的makefile目標(biāo),并修改以使configure能理解 –enable-maintainer-mode選項景鼠。–enable-maintainer-mode將maintaineronly目標(biāo)重新打開仲翎。僅供維護者使用的makefile目標(biāo)允許最終用戶清除自動生成的文件,比如configure铛漓,這意味著要修復(fù)編譯故障溯香,必須安裝有autoconf和automake軟件。注意浓恶,因為autogen.sh腳本主要是給開發(fā)人員用的玫坛,autogen.sh會自動傳遞一個–enable- maintainer-mode選項給configure。

AM_ACLOCAL_INCLUDE指定一個附加的目錄包晰,用于搜索m4宏湿镀。在這里禀梳,它指定為macros子目錄。在這個目錄中應(yīng)該有Gnome宏的拷貝肠骆。

GNOME_INIT給configure添加一個與Gnome相關(guān)的命令行參數(shù)個數(shù),并為Gnome程序定義一些makefile變量塞耕,這些變量中包含了必要的預(yù)處理程序和鏈接程序標(biāo)志蚀腿。這些標(biāo)志是由gnome-config腳本取得的。安裝gnome-libs時會安裝gnome- config腳本扫外。

AC_PROG_CC定位C編譯器莉钙。

AC_CHECK_LIB如果程序中加入了多線程用到的鎖的話就要加入像?AC_CHECK_LIB([pthread], [main])這樣的檢測,這個宏的含義如下:

LIBS是link的一個選項筛谚,程序中使用了讀寫鎖磁玉,所以要測試pthread庫中是否存在pthread_rwlock_init函數(shù)。

AC_PROG_RANLIB如果是多線程的程序的話要加入這句話驾讲,要不運行automake命令時會出錯蚊伞。

AC_ISC_POSIX添加一些在某些平臺上實現(xiàn)POSIX兼容需要的標(biāo)志。

AC_HEADER_STDC檢查當(dāng)前平臺上是否有標(biāo)準(zhǔn)的ANSI頭文件吮铭,如果有时迫,則定義STDC_HEADERS。

AC_ARG_PROGRAM添加一些選項到configure中谓晌,讓用戶能夠修改安裝程序的名稱(如果在用戶系統(tǒng)上碰巧有一個與要安裝的程序名稱相同的程序掠拳,這是很有用的)。

AM_PROG_LIBTOOL是由automake用來設(shè)置libtool的用途的纸肉。只在計劃編譯共享庫或動態(tài)可加載模塊時才需要設(shè)置這個值溺欧。

GNOME_COMPILE_WARNINGS給gcc命令行添加許多警告選項,但是在其他絕大多數(shù)的編譯器上什么也不做柏肪。

ALL_LINGUAS=“es”不是一個宏姐刁,只是一句shell代碼。它包含一個由空格分隔的語言種類縮寫表烦味,對應(yīng)于po子目錄下的.po文件龙填。.po文件包含翻譯成其他語言的文本,所以ALL_LINGUAS應(yīng)該列出程序已經(jīng)被翻譯成的所有語言拐叉。

AM_GNU_GETTEXT由automake使用岩遗,但是這個宏會隨gettext軟件包發(fā)布。它讓 automake執(zhí)行一些與國際化相關(guān)的任務(wù)凤瘦。

AC_SUBST輸出一個變量到由configure生成的文件中宿礁。具體內(nèi)容將在后面說明。

AC_OUTPUT列出由configure腳本創(chuàng)建的文件蔬芥。這些文件都是由帶.in后綴的同名文件生成的梆靖。例如控汉,src/Makefile是由src/Makefile.in生成的,config.h是由config.h.in生成的返吻。在執(zhí)行AC_OUTPUT宏時姑子,configure腳本處理包含有兩個@符號標(biāo)志的變量(例如@PACKAGE@)的文件。只有用AC_SUBST輸出了變量测僵,它才能識別這些變量(許多在上面討論過的預(yù)先寫好的宏都用AC_SUBST定義變量)街佑。這些特征用于將一個Makefile.in文件轉(zhuǎn)換成一個Makefile文件。典型情況下捍靠,Makefile.in 是由automake從Makefile.am(了解更多Makefile.am的寫法請閱讀《Makefile.am 規(guī)則和實例詳解》)生成的(不過沐旨,你可以只用autoconf,而不用automake榨婆,自己編寫一個 Makefile.in)磁携。

上面例子中提到的宏都是基本配置和常用的,還有一些可以用到的宏大家有興趣的話可以學(xué)習(xí)收集下良风,不過基本上上面所說的已經(jīng)可以完成一次配置谊迄,不過這里寫的一些配置大多數(shù)是收集于網(wǎng)絡(luò),希望大家和鵬博客共同學(xué)習(xí)提高烟央,有不對的地方希望大家能之出鳞上,希望大家能支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子恶导,更是在濱河造成了極大的恐慌,老刑警劉巖鬼贱,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異香璃,居然都是意外死亡这难,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門葡秒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姻乓,“玉大人,你說我怎么就攤上這事眯牧√Q遥” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵学少,是天一觀的道長剪个。 經(jīng)常有香客問我,道長版确,這世上最難降的妖魔是什么扣囊? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任乎折,我火速辦了婚禮,結(jié)果婚禮上侵歇,老公的妹妹穿的比我還像新娘骂澄。我一直安慰自己,他們只是感情好惕虑,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布坟冲。 她就那樣靜靜地躺著,像睡著了一般枷遂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棋嘲,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天酒唉,我揣著相機與錄音,去河邊找鬼沸移。 笑死痪伦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雹锣。 我是一名探鬼主播网沾,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蕊爵!你這毒婦竟也來了辉哥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤攒射,失蹤者是張志新(化名)和其女友劉穎醋旦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體会放,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡饲齐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咧最。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捂人。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖矢沿,靈堂內(nèi)的尸體忽然破棺而出滥搭,到底是詐尸還是另有隱情,我是刑警寧澤捣鲸,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布论熙,位于F島的核電站,受9級特大地震影響摄狱,放射性物質(zhì)發(fā)生泄漏脓诡。R本人自食惡果不足惜无午,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祝谚。 院中可真熱鬧宪迟,春花似錦、人聲如沸交惯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽席爽。三九已至意荤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間只锻,已是汗流浹背玖像。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留齐饮,地道東北人捐寥。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像祖驱,于是被迫代替她去往敵國和親握恳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容