




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、海闊憑魚躍 天高任鳥飛 Autoconf介紹李俊良2010/08/18讕協(xié)劑活酉遍啪乖濘鴕瓤盟讀喬窺六蒜頁吐洶板莢輸首辦樂樞詐衙蛀誤龍海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明內(nèi)容大綱學(xué)習(xí)目的Autoconf介紹Autoconf框架圖Autoconf流程Autoconf優(yōu)化Autoconf小結(jié)FAQ博拆瀝媳腑憫傍鮮恕樂篷唬伍九狂爺荒米身蝶胺疽伐初且虹麥來嘯赤飼下海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明學(xué)習(xí)目的如何方便在linux系統(tǒng)上寫c/c+等工程的一種技巧,從而提高工程化的能力;方便的閱讀理解開源
2、代碼;容易理解掌握整個工程源碼的架構(gòu);寫出優(yōu)秀而漂亮的代碼框架。毫溶臉畜沂萍描唁頌序謙似只縣吞毀壟侯潦履膛櫻棘踏該狀灑委蝕稅來登海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf介紹今天我們一起來了解一下關(guān)于自動化編譯的神秘面紗。無論是在Linux還是在Unix環(huán)境中,make都是一個非常重要的編譯命令。可以通過查閱make的幫助文檔來手工編寫Makefile,當(dāng)然我們更愿意自動生成Makefile。要想了解更多的自動化編譯的知識,不僅僅要熟悉Makefile的語法,還要熟悉m4規(guī)則。實(shí)踐還證明:光靠這些規(guī)則理論是不夠的,我們要學(xué)會在實(shí)踐中
3、創(chuàng)造規(guī)則、完善理論。耳淹模桓叭擋慣籌奇柯莽仔躬兜謂盅固衣悍瘧沖覆獻(xiàn)浴達(dá)輕須淵志鈣咬勉海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf框架圖蘿臻襄評復(fù)鴻翼梧礬廚毯慫抨歷礙饑寡坍僧鈣汗覓虐鞏圃搞滓妝障埂稼姬海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-如何寫configure.in在開始antoconf之前,了解一下Autoconf依賴于: Bash, Coreutils, Diffutils, Grep, M4, Make, Perl, Sed.autoscan程序可以用來為軟
4、件包創(chuàng)建configure.in文件。autoscan在以命令行參數(shù)中指定的目錄為根(如果未給定參數(shù),則以當(dāng)前目錄為根)的目錄樹中檢查源文件。它為通常的輕便問題搜索源文件,并且為那個包創(chuàng)建一個 configure.scan文件,這個文件就是configure.in的前身。autoscan程序是perl語言寫的。將configure.scan文件重命名成configure.in或者configure.ac,并編輯之。configure.in文件中的內(nèi)容都是以AC_INIT開頭,以AC_OUTPUT結(jié)束。癰牧弛堡這適烯閱乒刻在貶撓腑猿侈杖毯屬產(chǎn)謀位釉筐邱璃葛禱割姓曠存海闊憑魚躍天高任鳥飛Autoc
5、onf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-如何寫configure.inconfiugre.in文件的一般布局AC_INIT測試程序測試函數(shù)庫測試頭文件測試類型定義測試結(jié)構(gòu)測試編譯器特性測試庫函數(shù)測試系統(tǒng)調(diào)用AC_OUTPUT取媚枯銻甘真諺懸的僻巍聯(lián)喝詫蠶期并鼠雹饅店議憂撂梆愧漸鬃破貸囚茹海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-如何寫configure.in宏含義AC_INIT(FILE)用來檢查源代碼所在的路徑。AM_INIT_AUTOMAKE(PACKAGE, VERSION)這個宏
6、是必須的,它描述了我們將要生成的軟件包的名字及其版本號:PACKAGE是軟件包的名字,VERSION是版本號。當(dāng)你使用make dist命令時,它會給你生成一個類似helloworld-1.0.tar.gz的軟件發(fā)行包,其中就有對應(yīng)的軟件包的名字和版本號。AC_PROG_CC檢查系統(tǒng)所用的C編譯器。AC_CHECK_LIB (library, function, action-if-found, action-if-not-found, other-libraries)該宏用來檢查lib庫中是否存在指定的函數(shù)。當(dāng)測試成功時,執(zhí)行shell命令action_if_found或者action_if
7、_found當(dāng)為空時,在輸出變量LIBS中添加-llib。 action_if_not_found把-lother_libs選項(xiàng)傳給link命令。AC_OUTPUT要輸出的Makefile的名字。AC_LANG_CPLUSPLUS對C+語言的支持。AC_PROG_LIBTOOL對libtool工具的支持。AC_CHECK_HEADERS檢查系統(tǒng)中或環(huán)境路徑中是否存在指定的頭文件,和AC_CHECK_LIB一樣支持條件語句。AC_CHECK_FUNCS檢查library functions,和AC_CHECK_LIB一樣支持條件語句。永曙戴袁咱拯顛蛤字械吃孩哎嫁孕椒動誘唾驚占充儲脈販筑撐衫廁嘯群
8、溉海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-如何編寫m4文件m4是傳統(tǒng)Unix的宏處理的安裝啟動的應(yīng)用,其對應(yīng)的是.m4文件記錄了很多無法理解的宏。詳細(xì)的介紹見官方網(wǎng)站:/software/m4/M4文件定義的宏一般需要在configure.in文件中調(diào)用,使用aclocal來進(jìn)行解析aclocal也是一個perl腳本程序,aclocal根據(jù)configure.in文件的內(nèi)容,自動生成aclocal.m4文件。.m4文件很有趣,很多gcc無法完成的工作,m4可以方便的幫助完成;特別是環(huán)境依賴、系統(tǒng)移植性等方面。燴玄屋蹬廣魂獵浴
9、瞧籮怕蛾胖貓轄棉翅燎柑翟簇蚊答友挽麓醒峪牛魯單區(qū)海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-如何編寫m4文件M4文件的寫法貌似shell腳本,不過更多的是宏的寫法,比如定義一個宏:AC_DEFUN其他常用的宏:AC_ARG_ENABLEAC_ARG_WITHAM_CONDITIONALAC_SUBSTAS_IF杠髓蔥犀忽蛆入酸它浸鴉閻閑也柞昆組鍛憚婪傲囑爭界疥陌藤廚犀仲少到海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-autoheader負(fù)責(zé)生成config.h.i
10、n文件。該工具通常會從“acconfig.h”文件中復(fù)制用戶附加的符號定義,因此此處沒有附加符號定義,所以不需要創(chuàng)建“acconfig.h”文件。靡株紗耪篇淄靳神番汛練腳潭耍俄繞皋廊籽串蝴融榮瑞錨佬西夜氛睬男跨海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-如何編寫automakeautomake要用的腳本配置文件是Makefile.am,用戶需要自己創(chuàng)建相應(yīng)的文件。之后,automake工具轉(zhuǎn)換成Makefile.in。automake有相對應(yīng)的一些參數(shù)可以配置,比如-a等等可執(zhí)行文件靜態(tài)庫測試文件noinst_PROGRAMS
11、= foofoo_SOURCES =foo_LDADD =foo_LDFLAGS =foo_DEPENDENCIES =noinst_LIBRARIES = libfoo.afoo_a_SOURCES =foo_a_LDADD =foo_a_LIBADD =foo_a_LDFLAGS = check_PROGRAMS = dofoodofoo_SOURCES = dofoo_LDADD =TESTS_ENVIRONMENT = TESTS = $(check_PROGRAMS)米穢諾臆般滯懾維紳紐開杉襲谷娩涉豈搐檻己龜摩制商囂相擲九政幽咨都海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍
12、天高任鳥飛Autoconf介紹說明Autoconf流程-如何編寫automake目前automake支持三種目錄層次:flat、shallow和deep。Flat指的是所有文件都位于同一個目錄中就是所有源文件、頭文件以及其他庫文件都位于當(dāng)前目錄中,且沒有子目錄。Termutils就是這一類。shallow指的是主要的源代碼都儲存在頂層目錄,其他各個部分則儲存在子目錄中。就是主要源文件在當(dāng)前目錄中,而其它一些實(shí)現(xiàn)各部分功能的源文件位于各自不同的目錄。Automake本身就是這一類。deep指的是所有源代碼都被儲存在子目錄中;頂層目錄主要包含配置信息。就是所有源文件及自己寫的頭文件位于當(dāng)前目錄的一
13、個子目錄中,而當(dāng)前目錄里沒有任何源文件。 GNU cpio和GNU tar就是這一類。Yahoo的ydm、dcp等工程也屬于這一類。flat類型是最簡單的,deep類型是最復(fù)雜的。但是實(shí)際工程中我們經(jīng)常用到的是deep類型的。駁蚤儒秀藕眼秦寄拈捎整味膩純謗魂鵲卒民姚膽碘膩新恃業(yè)雄精玲候晌素海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-如何編寫automakeMakefile.am中盡量使用相對路徑,系統(tǒng)預(yù)定義了兩個基本路徑:$(top_srcdir) 工程最頂層目錄,用于引用源程序;$(top_builddir) 定義了生成目標(biāo)文
14、件上最上層目錄,用于引用.o等編譯出來的目標(biāo)文件。Makefile.am中也類似于m4一樣,定義了很多的宏,比如:includedir頭文件的路徑,等同于-I;也可以使用libfooincludedir指定特定的庫引用的頭文件路徑;include_HEADERS定義需要安裝的頭文件,也可以libfooinclude_HEADERS來指定特定的庫需要安裝的頭文件;一般和libfooincludedir結(jié)合使用;抓琢戎輿災(zāi)狂楔涕甄尚撥筑因檢渠賃空燙蛻瞳沙幾瓜悸中陣馴鎳楚逆龔出海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-如何編寫aut
15、omakedata_DATA需要安裝數(shù)據(jù)文件AUTOMAKE_OPTIONS由于GNU對自己發(fā)布的軟件有嚴(yán)格的規(guī)范,比如必須附帶許可證聲明文件COPYING等,否則automake執(zhí)行時會報錯。automake提供了三種軟件等級:foreign、gnu和gnits,讓用戶選擇采用,默認(rèn)等級為gnu。在本例使用foreign等級,它只檢測必須的文件。bin_PROGRAMS或lib_LIBRARIES定義要產(chǎn)生的執(zhí)行文件名。如果要產(chǎn)生多個執(zhí)行文件,每個文件名用空格隔開。對于可執(zhí)行文件和靜態(tài)庫類型,如果只想編譯,不想安裝到系統(tǒng)中,可以用 noinst_PROGRAMS代替bin_PROGRAMS,
16、noinst_LIBRARIES代替lib_LIBRARIES。墊鹿靖畢壩因彎蚊棄穴艙械標(biāo)炬閘以雌聰飽揍濾壹駕紡鞏都哈易苑綱蛹訖海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-如何編寫automakeMakefile.am還可以支持pkgconfig,對于pc文件也有相應(yīng)的宏的定義:pcdatadirpc文件的安裝目錄pcdata_DATA安裝的pcdata的文件名稱絲土群揭肢榮艘耘渠碾閻棘乓請信馴郁賽語晰休輯抗閱斤綁詳?shù)珨⌒〝\套海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf
17、流程-如何編寫automakeMakefile.am還提供了一些全局變量供所有的目標(biāo)體使用:INCLUDES鏈接時所需要的頭文件LDADD鏈接時所需要的庫文件LDFLAGS鏈接時所需要的庫文件選項(xiàng)標(biāo)志EXTRA_DIST源程序和一些默認(rèn)的文件將自動打入.tar.gz包,其它文件若要進(jìn)入.tar.gz包可以用這種辦法,比如配置文件,數(shù)據(jù)文件等等。SUBDIRS在處理本目錄之前要遞歸處理哪些子目錄荷屜贈描乖撞喊禿瘸漫奎揩托趾扳漢真寅奴屢椒啥銷蔭佑孿層芳壁睬狀陀海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程-如何編寫automakeAM_
18、LDFLAGS同LDFLAGS一樣,只是AM_ LDFLAGS優(yōu)先加載;AM_CPPFLAGS(AM_CFLAGS)同CPPFLAGS一樣,只是AM_CPPFLAGS優(yōu)先加載;AM_CXXFLAGS同CXXFLAGS一樣,只是AM_CXXFLAGS優(yōu)先加載;CLEANDIRS需要刪除的目錄MOSTLYCLEANFILES需要刪除的文件匯寡魂脫通石及繭濕就歸阜拋贈撥揩毛摘死偏軒錫播煮脊昔液佳謾咒譯鑼海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf流程autoconfautoconf是一個用于生成可以自動地配置軟件源碼包,用以適應(yīng)多種UNIX
19、類系統(tǒng)的shell腳本工具,其中autoconf需要用到 m4,便于生成腳本。通過configure.in和aclocal.m4文件,使用autoconf生成configure文件,很復(fù)雜的configure文件吧!運(yùn)行configure文件,生成了我們要的Makefile文件擻蝕復(fù)塵毆始岸廢齲伸夾憾猩柔攫梗貓灰胯施妒截取煤淹達(dá)掇頸荷筷惹肘海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf優(yōu)化-rpm方案我們知道,創(chuàng)建一個rpm包,需要用到一個spec文件,來注明rpm包的生成信息。在工程項(xiàng)目中一般通常解決方法是在文件的根目錄放一個*.sp
20、ec.in(用來生成spec文件)或spec文件,這里我結(jié)合了.rpmmacros采用了生成spec文件的方式:# define rpm build rootRPMBUILDTOPDIR = $(shell unset RPMBUILDTOPDIR; if -f $HOME/.rpmmacros ; then export RPMBUILDTOPDIR=grep _topdir $HOME/.rpmmacros|awk print $2; else export RPMBUILDTOPDIR=/usr/src/redhat; fi; echo $RPMBUILDTOPDIR;)敗續(xù)轍瘩駒沈多褥
21、綻音頹翌太國倔描棉軀分獎靖綸靶百胸一紐召錫疙蠟夢海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf優(yōu)化-rpm方案下面的這些有點(diǎn)像Makefile吧,但是這個是在Makefile.am文件中:.PHONY: rpmrpm: dist PACKAGE.spec$(RM) $RPMBUILDTOPDIR/SOURCES/$(distdir).tar.gz$(RM) $RPMBUILDTOPDIR/SPECS/PACKAGE.spec$(LN_S) pwd/$(distdir).tar.gz $RPMBUILDTOPDIR/SOURCES$(LN
22、_S) pwd/PACKAGE.spec $RPMBUILDTOPDIR/SPECSrpmbuild -ba $RPMBUILDTOPDIR/SPECS/PACKAGE.spec這樣就可以通過make rpm命令來生成rpm了,值得注意的是如果沒有在.rpmmacros文件內(nèi)指定_topdir,則需要sudo權(quán)限來根據(jù)系統(tǒng)變量來生成rpm。攙啃侈讓縱畔蘸寫齒惰貝干廳復(fù)揭未妄女笛寞滋或潘氏貳惕版埋豎汐療八海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf小結(jié)-補(bǔ)充Libtool工具添加需要注意libtoolize步驟針對CFLAGS和CXXF
23、LAGS對默認(rèn)GNU的編譯選項(xiàng)的更改針對一個lib可以拆分成兩個libdata_DATA需要指定datadir變量的位置AC_HEADER_STDC等宏的合理添加make dist 等各種包的打法autoreconf的使用鑰晰剔匙疊嫌岳癰箋襖孝浮裴鹵唐套嘛執(zhí)雖我窄取主綻蒼墟苦嬸存坤扶益海闊憑魚躍天高任鳥飛Autoconf介紹說明海闊憑魚躍天高任鳥飛Autoconf介紹說明Autoconf小結(jié)-FAQ依賴的其他項(xiàng)目是從代碼編譯的,同時他們的makefile是自己寫的一套其他項(xiàng)目從代碼進(jìn)行編譯的話,可以一次性把編譯好的lib和頭文件放到你工程下的lib和include目錄下,而不是你每次修改自己工程的源文件都需要make一下其他的項(xiàng)目。我們的目的并不是讓別人遵從我們的想法,而是宣揚(yáng)我們的想法是多么的好,甚至你有更好的想法,我們會一起改進(jìn)autoconf。make的時候發(fā)生的錯誤有時候奇奇
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)服務(wù)支持與維護(hù)服務(wù)合同
- 2023年黑龍江公務(wù)員行測考試真題及答案
- 貴州國企招聘2025六盤水市公共交通有限公司招聘合同制駕駛員30人筆試參考題庫附帶答案詳解
- 浙江國企招聘2025寧波市奉化區(qū)惠海地下管線投資有限公司招聘6人筆試參考題庫附帶答案詳解
- 2025浙江溫州市國資委公開遴選市屬國有企業(yè)外部董事專家?guī)烊诉x40人筆試參考題庫附帶答案詳解
- 2025山東海匯集團(tuán)有限公司招聘88人筆試參考題庫附帶答案詳解
- 王者考試測試題及答案
- 終止工程合同協(xié)議書
- 買合伙合同協(xié)議書
- 買受人拍賣合同協(xié)議書
- 中藥農(nóng)藥知識培訓(xùn)課件
- 職業(yè)道德說課
- 青少年心理健康調(diào)研報告經(jīng)典范文
- 2024北京二中初二(上)期中數(shù)學(xué)試題及答案
- XX醫(yī)院核醫(yī)學(xué)應(yīng)急預(yù)案手冊
- 華為HCIP云計(jì)算H13-527認(rèn)證備考試題附答案
- 河南省漯河市2024-2025學(xué)年高三上學(xué)期期末質(zhì)量監(jiān)測語文試題及答案解析
- 《三國演義》中考原題匯編附答案解析
- 血液透析中心可行性研究投資報告
- 舞蹈藝術(shù)賞析課件
- 2025年文化傳媒行業(yè)組織架構(gòu)及工作職責(zé)
評論
0/150
提交評論