日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]在上一小節(jié),讀者已經(jīng)了解到了make項(xiàng)目管理器的強(qiáng)大功能。的確,makefile可以幫助make完成它的使命,但要承認(rèn)的是,編寫(xiě)makefile確實(shí)不是一件輕松的事,尤其對(duì)于一個(gè)較大的項(xiàng)目而言更是如此。那么,有沒(méi)有一種輕松的手段生成makefile而同時(shí)又能讓用戶享受make的優(yōu)越性呢?

3.6使用autotools

在上一小節(jié),讀者已經(jīng)了解到了make項(xiàng)目管理器的強(qiáng)大功能。的確,makefile可以幫助make完成它的使命,但要承認(rèn)的是,編寫(xiě)makefile確實(shí)不是一件輕松的事,尤其對(duì)于一個(gè)較大的項(xiàng)目而言更是如此。那么,有沒(méi)有一種輕松的手段生成makefile而同時(shí)又能讓用戶享受make的優(yōu)越性呢?本節(jié)要講的autotools系列工具正是為此而設(shè)的,它只需用戶輸入簡(jiǎn)單的目標(biāo)文件、依賴文件、文件目錄等就可以輕松地生成makefile了,這無(wú)疑是廣大用戶所希望的。另外,這些工具還可以完成系統(tǒng)配置信息的收集,從而可以方便地處理各種移植性的問(wèn)題。也正是基于此,現(xiàn)在Linux上的軟件開(kāi)發(fā)一般都用autotools來(lái)制作makefile,讀者在后面的講述中就會(huì)了解到。

3.6.1autotools使用流程

正如前面所言,autotools是系列工具,讀者首先要確認(rèn)系統(tǒng)是否裝了以下工具(可以用which命令進(jìn)行查看)。

n aclocal

n autoscan

n autoconf

n autoheader

n automake

使用autotools主要就是利用各個(gè)工具的腳本文件以生成最后的makefile。其總體流程是這樣的。

n 使用aclocal生成一個(gè)“aclocal.m4”文件,該文件主要處理本地的宏定義;

n 改寫(xiě)“configure.scan”文件,并將其重命名為“configure.in”,并使用autoconf文件生成configure文件。

接下來(lái),筆者將通過(guò)一個(gè)簡(jiǎn)單的hello.c例子帶領(lǐng)讀者熟悉autotools生成makefile的過(guò)程,由于在這過(guò)程中會(huì)涉及較多的腳本文件,為了更清楚地了解相互之間的關(guān)系,強(qiáng)烈建議讀者實(shí)際動(dòng)手操作以體會(huì)其整個(gè)過(guò)程。

1.a(chǎn)utoscan

它會(huì)在給定目錄及其子目錄樹(shù)中檢查源文件,若沒(méi)有給出目錄,就在當(dāng)前目錄及其子目錄樹(shù)中進(jìn)行檢查。它會(huì)搜索源文件以尋找一般的移植性問(wèn)題并創(chuàng)建一個(gè)文件“configure.scan”,該文件就是接下來(lái)autoconf要用到的“configure.in”原型。如下所示:

[root@localhostautomake]#autoscan

autom4te:configure.ac:nosuchfileordirectory

autoscan:/usr/bin/autom4tefailedwithexitstatus:1

[root@localhostautomake]#ls

autoscan.logconfigure.scanhello.c

由上述代碼可知autoscan首先會(huì)嘗試去讀入“configure.ac”(同configure.in的配置文件)文件,此時(shí)還沒(méi)有創(chuàng)建該配置文件,于是它會(huì)自動(dòng)生成一個(gè)“configure.in”的原型文件“configure.scan”。

2.a(chǎn)utoconf

configure.in是autoconf的腳本配置文件,它的原型文件“configure.scan”如下所示:

#-*-Autoconf-*-

#Processthisfilewithautoconftoproduceaconfigurescript.

AC_PREREQ(2.59)

#Thenextoneismodifiedbydavid

#AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)

AC_INIT(hello,1.0)

#Thenextoneisaddedbydavid

AM_INIT_AUTOMAKE(hello,1.0)

AC_CONFIG_SRCDIR([hello.c])

AC_CONFIG_HEADER([config.h])

#Checksforprograms.

AC_PROG_CC

#Checksforlibraries.

#Checksforheaderfiles.

#Checksfortypedefs,structures,andcompilercharacteristics.

#Checksforlibraryfunctions.

AC_CONFIG_FILES([makefile])

AC_OUTPUT

下面對(duì)這個(gè)腳本文件進(jìn)行解釋。

n 以“#”號(hào)開(kāi)始的行是注釋。

n AC_PREREQ宏聲明本文件要求的autoconf版本,如本例使用的版本2.59。

n AC_INIT宏用來(lái)定義軟件的名稱和版本等信息,在本例中省略了BUG-REPORT-ADDRESS,一般為作者的E-mail。

n AM_INIT_AUTOMAKE是筆者另加的,它是automake所必備的宏,使automake自動(dòng)生成makefile.in,也同前面一樣,PACKAGE是所要產(chǎn)生軟件套件的名稱,VERSION是版本編號(hào)。

n AC_CONFIG_SRCDIR宏用來(lái)檢查所指定的源碼文件是否存在,以及確定源碼目錄的有效性。在此處源碼文件為當(dāng)前目錄下的hello.c。

n AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用。

n AC_CONFIG_FILES宏用于生成相應(yīng)的makefile文件。

n 中間的注釋之間可以分別添加用戶測(cè)試程序、測(cè)試函數(shù)庫(kù)、測(cè)試頭文件等宏定義。

接下來(lái)首先運(yùn)行aclocal,生成一個(gè)“aclocal.m4”文件,該文件主要處理本地的宏定義。如下所示:

[root@localhostautomake]#aclocal

再接著運(yùn)行autoconf,生成“configure”可執(zhí)行文件。如下所示:

[root@localhostautomake]#autoconf

[root@localhostautomake]#ls

aclocal.m4autom4te.cacheautoscan.logconfigureconfigure.inhello.c

3.a(chǎn)utoheader

接著使用autoheader命令,它負(fù)責(zé)生成config.h.in文件。該工具通常會(huì)從“acconfig.h”文件中復(fù)制用戶附加的符號(hào)定義,因?yàn)檫@里沒(méi)有附加符號(hào)定義,所以不需要?jiǎng)?chuàng)建“acconfig.h”文件。如下所示:

[root@localhostautomake]#autoheader

4.a(chǎn)utomake

這一步是創(chuàng)建makefile很重要的一步,automake要用的腳本配置文件是makefile.am,用戶需要自己創(chuàng)建相應(yīng)的文件。之后,automake工具轉(zhuǎn)換成makefile.in。在該例中,筆者創(chuàng)建的文件為makefile.am,如下所示:

AUTOMAKE_OPTIONS=foreign

bin_PROGRAMS=hello

hello_SOURCES=hello.c

下面對(duì)該腳本文件的對(duì)應(yīng)項(xiàng)進(jìn)行解釋。

n 其中的AUTOMAKE_OPTIONS為設(shè)置automake的選項(xiàng)。GNU對(duì)自己發(fā)布的軟件有嚴(yán)格的規(guī)范,比如必須附帶許可證聲明文件COPYING等,否則automake執(zhí)行時(shí)會(huì)報(bào)錯(cuò)。automake提供了3種軟件等級(jí):foreign、gnu和gnits,讓用戶選擇采用,默認(rèn)等級(jí)為gnu。在本示例中采用foreign等級(jí),它只檢測(cè)必須的文件。

n bin_PROGRAMS定義要產(chǎn)生的執(zhí)行文件名。如果要產(chǎn)生多個(gè)執(zhí)行文件,每個(gè)文件名用空格隔開(kāi)。

n hello_SOURCES定義“hello”這個(gè)執(zhí)行程序所需要的原始文件。如果“hello”這個(gè)程序是由多個(gè)原始文件所產(chǎn)生的,則必須把它所用到的所有原始文件都列出來(lái),并用空格隔開(kāi)。例如:若目標(biāo)體“hello”需要“hello.c”、“david.c”、“hello.h”三個(gè)依賴文件,則定義hello_SOURCES=hello.cdavid.chello.h。要注意的是,如果要定義多個(gè)執(zhí)行文件,則對(duì)每個(gè)執(zhí)行程序都要定義相應(yīng)的file_SOURCES。

接下來(lái)可以使用automake命令來(lái)生成“configure.in”文件,在這里使用選項(xiàng)“-a”(或者“—adding-missing”)可以讓automake自動(dòng)添加一些必需的腳本文件。如下所示:

[root@localhostautomake]#automake–a(或者automake--add-missing)

configure.in:installing'./install-sh'

configure.in:installing'./missing'

makefile.am:installing'depcomp'

[root@localhostautomake]#ls

aclocal.m4autoscan.logconfigure.inhello.cmakefile.ammissing

autom4te.cacheconfiguredepcompinstall-shmakefile.inconfig.h.in

可以看到,在automake之后就可以生成configure.in文件。

5.運(yùn)行configure

在這一步中,通過(guò)運(yùn)行自動(dòng)配置設(shè)置文件configure,把makefile.in變成了最終的makefile。如下所示:

[root@localhostautomake]#./configure

checkingforaBSD-compatibleinstall.../usr/bin/install-c

checkingwhetherbuildenvironmentissane...yes

checkingforgawk...gawk

checkingwhethermakesets$(MAKE)...yes

checkingforgcc...gcc

checkingforCcompilerdefaultoutputfilename...a.out

checkingwhethertheCcompilerworks...yes

checkingwhetherwearecrosscompiling...no

checkingforsuffixofexecutables...

checkingforsuffixofobjectfiles...o

checkingwhetherweareusingtheGNUCcompiler...yes

checkingwhethergccaccepts-g...yes

checkingforgccoptiontoacceptANSIC...noneneeded

checkingforstyleofincludeusedbymake...GNU

checkingdependencystyleofgcc...gcc3

configure:creating./config.status

config.status:creatingmakefile

config.status:executingdepfilescommands

可以看到,在運(yùn)行configure時(shí)收集了系統(tǒng)的信息,用戶可以在configure命令中對(duì)其進(jìn)行方便的配置。在./configure的自定義參數(shù)有兩種,一種是開(kāi)關(guān)式(--enable-XXX或--disable-XXX),另一種是開(kāi)放式,即后面要填入一串字符(--with-XXX=yyyy)參數(shù)。讀者可以自行嘗試其使用方法。另外,讀者可以查看同一目錄下的“config.log”文件,以方便調(diào)試之用。

到此為止,makefile就可以自動(dòng)生成了?;貞浾麄€(gè)步驟,用戶不再需要定制不同的規(guī)則,而只需要輸入簡(jiǎn)單的文件及目錄名即可,這樣就大大方便了用戶的使用。autotools生成makefile的流程如圖3.9所示。

圖3.9autotools生成makefile的流程圖

3.6.2使用autotools所生成的makefile

autotools生成的makefile除具有普通的編譯功能外,還具有以下主要功能(感興趣的讀者可以查看這個(gè)簡(jiǎn)單的hello.c程序的makefile)。

1.make

鍵入make默認(rèn)執(zhí)行“makeall”命令,即目標(biāo)體為all,其執(zhí)行情況如下所示:

[root@localhostautomake]#make

ifgcc-DPACKAGE_NAME=""-DPACKAGE_TARNAME=""-DPACKAGE_VERSION=""-DPACKAGE_STRING=""-DPACKAGE_BUGREPORT=""-DPACKAGE="hello"-DVERSION="1.0"-I.-I.-g-O2-MThello.o-MD-MP-MF".deps/hello.Tpo"-c-ohello.ohello.c;

thenmv-f".deps/hello.Tpo"".deps/hello.Po";elserm-f".deps/hello.Tpo";exit1;fi

gcc-g-O2-ohellohello.o

此時(shí)在本目錄下就生成了可執(zhí)行文件“hello”,運(yùn)行“./hello”能出現(xiàn)正常結(jié)果,如下所示:

[root@localhostautomake]#./hello

Hello!Autoconf!

2.makeinstall

此時(shí),會(huì)把該程序安裝到系統(tǒng)目錄中去,如下所示:

[root@localhostautomake]#makeinstall

ifgcc-DPACKAGE_NAME=""-DPACKAGE_TARNAME=""-DPACKAGE_VERSION=""-DPACKAGE_STRING=""-DPACKAGE_BUGREPORT=""-DPACKAGE="hello"-DVERSION="1.0"-I.-I.-g-O2-MThello.o-MD-MP-MF".deps/hello.Tpo"-c-ohello.ohello.c;

thenmv-f".deps/hello.Tpo"".deps/hello.Po";elserm-f".deps/hello.Tpo";exit1;fi

gcc-g-O2-ohellohello.o

make[1]:Enteringdirectory'/root/workplace/automake'

test-z"/usr/local/bin"||mkdir-p--"/usr/local/bin"

/usr/bin/install-c'hello''/usr/local/bin/hello'

make[1]:Nothingtobedonefor'install-data-am'.

make[1]:Leavingdirectory'/root/workplace/automake'

此時(shí),若直接運(yùn)行hello,也能出現(xiàn)正確結(jié)果,如下所示:

[root@localhostautomake]#hello

Hello!Autoconf!

3.makeclean

此時(shí),make會(huì)清除之前所編譯的可執(zhí)行文件及目標(biāo)文件(objectfile,*.o),如下所示:

[root@localhostautomake]#makeclean

test-z"hello"||rm-fhello

rm-f*.o

4.makedist

此時(shí),make將程序和相關(guān)的文檔打包為一個(gè)壓縮文檔以供發(fā)布,如下所示:

[root@localhostautomake]#makedist

[root@localhostautomake]#lshello-1.0-tar.gz

hello-1.0-tar.gz

可見(jiàn)該命令生成了一個(gè)hello-1.0-tar.gz壓縮文件。

由上面的講述讀者不難看出,autotools是軟件維護(hù)與發(fā)布的必備工具,鑒于此,如今GUN的軟件一般都是由automake來(lái)制作的。

想一想

對(duì)于automake制作的這類軟件,應(yīng)如何安裝呢?

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉