開發(fā)工具介紹課件_第1頁
開發(fā)工具介紹課件_第2頁
開發(fā)工具介紹課件_第3頁
開發(fā)工具介紹課件_第4頁
開發(fā)工具介紹課件_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

開發(fā)工具介紹1開發(fā)工具介紹12

“工欲善其事, 必先利其器”

--《論語》2 3主要內(nèi)容GNUTools簡介GNUTools交叉開發(fā)環(huán)境及其安裝3主要內(nèi)容GNUTools簡介4本地開發(fā)vs交叉平臺(tái)開發(fā)本地開發(fā):

一般軟件的開發(fā)屬于本地開發(fā),也就是說開發(fā)軟件的系統(tǒng)與運(yùn)行軟件的系統(tǒng)是相同的。交叉平臺(tái)開發(fā):

本課程所涉及到的嵌入式系統(tǒng)開發(fā)屬于交叉平臺(tái)開發(fā),也就是說開發(fā)軟件的系統(tǒng)與運(yùn)行軟件的系統(tǒng)不同。4本地開發(fā)vs交叉平臺(tái)開發(fā)本地開發(fā):

一般軟件的開發(fā)屬于2019-7-18謝謝欣賞5交叉開發(fā)平臺(tái)主機(jī):

開發(fā)軟件的平臺(tái),稱為主機(jī),往往是通用電腦;目標(biāo)機(jī):

運(yùn)行軟件的平臺(tái),稱為目標(biāo)機(jī),在這里是嵌入式系統(tǒng)。2019-7-18謝謝欣賞5交叉開發(fā)平臺(tái)主機(jī):

開發(fā)軟件的平2019-7-18謝謝欣賞6嵌入式交叉開發(fā)工具掌握嵌入式開發(fā)工具的使用是進(jìn)行嵌入式開發(fā)的前提條件之一與主流軟件開發(fā)工具類似,嵌入式交叉開發(fā)工具也包括編譯器,

即能夠把一個(gè)源程序編譯生成一個(gè)可執(zhí)行程序的軟件調(diào)試工具,

即能夠?qū)?zhí)行程序進(jìn)行源碼或匯編級(jí)調(diào)試的軟件軟件工程工具,

用于協(xié)助多人開發(fā)或大型軟件項(xiàng)目的管理的軟件2019-7-18謝謝欣賞6嵌入式交叉開發(fā)工具掌握嵌入式開發(fā)2019-7-18謝謝欣賞7GNUtoolsGNUtools和其他一些優(yōu)秀的開源軟件可以完全覆蓋上述類型的軟件開發(fā)工具。為了更好的開發(fā)嵌入式系統(tǒng),需要了解如下一些軟件GCCBinutils—輔助GCC的主要軟件Gdbmakecvs2019-7-18謝謝欣賞7GNUtoolsGNUtoo2019-7-18謝謝欣賞8GCC很多人認(rèn)為GCC只是一個(gè)C編譯器,

其實(shí)GCC=GNUCompilerCollection目前,GCC可以支持多種高級(jí)語言,如C、C++ADAObjectCJAVAFortranPASCAL2019-7-18謝謝欣賞8GCC很多人認(rèn)為GCC只是一個(gè)C2019-7-18謝謝欣賞9GCC下的工具cpp—

預(yù)處理器

GNUC編譯器在編譯前自動(dòng)使用cpp對(duì)用戶程序進(jìn)行預(yù)處理gcc—

符合ISO等標(biāo)準(zhǔn)的C編譯器g++—

基本符合ISO標(biāo)準(zhǔn)的C++編譯器gcj—GCC的java前端gnat—GCC的GNUADA95前端2019-7-18謝謝欣賞9GCC下的工具cpp—預(yù)處理2019-7-18謝謝欣賞10GNUTools—gccgcc是一個(gè)強(qiáng)大的工具集合,它包含了預(yù)處理器,編譯器,匯編器,鏈接器等組件。它會(huì)在需要的時(shí)候調(diào)用其他組件。

輸入文件的類型和傳遞給gcc的參數(shù)決定了gcc調(diào)用具體的哪些組件。對(duì)于開發(fā)者,它提供的足夠多的參數(shù),可以讓開發(fā)者全面控制代碼的生成,這對(duì)嵌入式系統(tǒng)級(jí)的軟件開發(fā)非常重要2019-7-18謝謝欣賞10GNUTools—gccgc2019-7-18謝謝欣賞11gcc使用舉例(1)

源程序2019-7-18謝謝欣賞11gcc使用舉例(1)

源程序2019-7-18謝謝欣賞12gcc使用舉例(2)

編譯和運(yùn)行編譯運(yùn)行2019-7-18謝謝欣賞12gcc使用舉例(2)

編譯和運(yùn)2019-7-18謝謝欣賞13gcc的工作工程(1)如果使用-v選項(xiàng),則可以看到許多被隱藏的信息2019-7-18謝謝欣賞13gcc的工作工程(1)如果使用2019-7-18謝謝欣賞142019-7-18謝謝欣賞142019-7-18謝謝欣賞15gcc的編譯過程一般情況下,c程序的編譯過程為預(yù)處理編譯成匯編代碼匯編成目標(biāo)代碼鏈接2019-7-18謝謝欣賞15gcc的編譯過程一般情況下,c2019-7-18謝謝欣賞16gcc的工作過程(2)預(yù)處理

使用-E參數(shù)

輸出文件的后綴為“.cpp”gcc–E–ogcctest.cppgcctest.c使用wc命令比較預(yù)處理后的文件與源文件,可以看到兩個(gè)文件的差異2019-7-18謝謝欣賞16gcc的工作過程(2)預(yù)處理

2019-7-18謝謝欣賞17行數(shù)單詞數(shù)字節(jié)數(shù)預(yù)編譯2019-7-18謝謝欣賞17行數(shù)單詞數(shù)字節(jié)數(shù)預(yù)編譯2019-7-18謝謝欣賞18預(yù)處理文件

匯編代碼

1)使用-x參數(shù)說明根據(jù)指定的步驟進(jìn)行工作,cpp-output指明從預(yù)處理得到的文件開始編譯

2)使用-S說明生成匯編代碼后停止工作

gcc–xcpp-output–S–ogcctest.sgcctest.cpp也可以直接編譯到匯編代碼

gcc–Sgcctest.cgcc的工作過程(3)2019-7-18謝謝欣賞18預(yù)處理文件匯編代碼

1)使用2019-7-18謝謝欣賞19預(yù)處理文件

匯編代碼直接編譯到匯編代碼2019-7-18謝謝欣賞19預(yù)處理文件匯編代碼直接編譯到2019-7-18謝謝欣賞20gcc的工作過程(4)匯編代碼

目標(biāo)代碼

gcc–xassembler–cgcctest.s直接編譯成目標(biāo)代碼

gcc–cgcctest.c使用匯編器生成目標(biāo)代碼as–ogcctest.ogcctest.s2019-7-18謝謝欣賞20gcc的工作過程(4)匯編代碼2019-7-18謝謝欣賞21匯編代碼

目標(biāo)代碼直接編譯成目標(biāo)代碼使用匯編器2019-7-18謝謝欣賞21匯編代碼目標(biāo)代碼直接編譯成目2019-7-18謝謝欣賞22gcc的工作過程(5)目標(biāo)代碼

執(zhí)行代碼

gcc–ogcctestgcctest.o直接生成執(zhí)行代碼

gcc–ogcctestgcctest.c2019-7-18謝謝欣賞22gcc的工作過程(5)目標(biāo)代碼2019-7-18謝謝欣賞23目標(biāo)代碼

執(zhí)行代碼直接生成執(zhí)行代碼2019-7-18謝謝欣賞23目標(biāo)代碼執(zhí)行代碼直接生成執(zhí)行2019-7-18謝謝欣賞24gcc的高級(jí)選項(xiàng)-Wall:打開所有的警告信息2019-7-18謝謝欣賞24gcc的高級(jí)選項(xiàng)-Wall:打2019-7-18謝謝欣賞25根據(jù)警告信息檢查源程序Main函數(shù)的返回值為int在函數(shù)的末尾應(yīng)當(dāng)返回一個(gè)值2019-7-18謝謝欣賞25根據(jù)警告信息檢查源程序Main2019-7-18謝謝欣賞26修改源程序2019-7-18謝謝欣賞26修改源程序2019-7-18謝謝欣賞27優(yōu)化編譯優(yōu)化編譯選項(xiàng)有:-O0

缺省情況,不優(yōu)化-O1-O2-O3等等不同程度的優(yōu)化2019-7-18謝謝欣賞27優(yōu)化編譯優(yōu)化編譯選項(xiàng)有:不同程2019-7-18謝謝欣賞28gcc的優(yōu)化編譯舉例(1)

考慮如下的源代碼不同的優(yōu)化編譯選項(xiàng)2019-7-18謝謝欣賞28gcc的優(yōu)化編譯舉例(1)

考2019-7-18謝謝欣賞29gcc的優(yōu)化編譯舉例(2)

使用time命令統(tǒng)計(jì)程序的運(yùn)行2019-7-18謝謝欣賞29gcc的優(yōu)化編譯舉例(2)

使2019-7-18謝謝欣賞30GNUbinutilsbinutils是一組二進(jìn)制工具程序集,是輔助GCC的主要軟件,它主要包括addr2line

把程序地址轉(zhuǎn)換為文件名和行號(hào)。在命令行中給它一個(gè)地址和一個(gè)可執(zhí)行文件名,它就會(huì)使用這個(gè)可執(zhí)行文件的調(diào)試信息指出在給出的地址上是哪個(gè)文件以及行號(hào)。ar

建立、修改、提取歸檔文件。歸檔文件是包含多個(gè)文件內(nèi)容的一個(gè)大文件,其結(jié)構(gòu)保證了可以恢復(fù)原始文件內(nèi)容。2019-7-18謝謝欣賞30GNUbinutilsbin2019-7-18謝謝欣賞31as

是GNU匯編器,主要用來編譯GNUC編譯器gcc輸出的匯編文件,他將匯編代碼轉(zhuǎn)換成二進(jìn)制代碼,并存放到一個(gè)object文件中,該目標(biāo)文件將由連接器ld連接C++filt解碼C++符號(hào)名,連接器使用它來過濾C++和Java符號(hào),防止重載函數(shù)沖突。gprof

顯示程序調(diào)用段的各種數(shù)據(jù)。ld

是連接器,它把一些目標(biāo)和歸檔文件結(jié)合在一起,重定位數(shù)據(jù),并鏈接符號(hào)引用,最終形成一個(gè)可執(zhí)行文件。通常,建立一個(gè)新編譯程序的最后一步就是調(diào)用ld。2019-7-18謝謝欣賞31as是GNU匯編器,主要用來2019-7-18謝謝欣賞32nm

列出目標(biāo)文件中的符號(hào)。objcopy把一種目標(biāo)文件中的內(nèi)容復(fù)制到另一種類型的目標(biāo)文件中.objdump

顯示一個(gè)或者更多目標(biāo)文件的信息。使用選項(xiàng)來控制其顯示的信息。它所顯示的信息通常只有編寫編譯工具的人才感興趣。ranlib

產(chǎn)生歸檔文件索引,并將其保存到這個(gè)歸檔文件中。在索引中列出了歸檔文件各成員所定義的可重分配目標(biāo)文件。readelf

顯示ebf格式可執(zhí)行文件的信息。2019-7-18謝謝欣賞32nm列出目標(biāo)文件中的符號(hào)。2019-7-18謝謝欣賞33size

列出目標(biāo)文件每一段的大小以及總體的大小。默認(rèn)情況下,對(duì)于每個(gè)目標(biāo)文件或者一個(gè)歸檔文件中的每個(gè)模塊只產(chǎn)生一行輸出。strings

打印某個(gè)文件的可打印字符串,這些字符串最少4個(gè)字符長,也可以使用選項(xiàng)-n設(shè)置字符串的最小長度。默認(rèn)情況下,它只打印目標(biāo)文件初始化和可加載段中的可打印字符;對(duì)于其它類型的文件它打印整個(gè)文件的可打印字符,這個(gè)程序?qū)τ诹私夥俏谋疚募膬?nèi)容很有幫助。strip

丟棄目標(biāo)文件中的全部或者特定符號(hào)。2019-7-18謝謝欣賞33size列出目標(biāo)文件每一段的2019-7-18謝謝欣賞34libiberty

包含許多GNU程序都會(huì)用到的函數(shù),這些程序有:getopt,obstack,strerror,strtol和strtoul.libbfd

二進(jìn)制文件描述庫.libopcodes

用來處理opcodes的庫,在生成一些應(yīng)用程序的時(shí)候也會(huì)用到它,比如objdump.Opcodes是文本格式可讀的處理器操作指令.2019-7-18謝謝欣賞34libiberty包含許多2019-7-18謝謝欣賞35binutils開發(fā)工具使用舉例arnmObjcopyObjdumpreadelf2019-7-18謝謝欣賞35binutils開發(fā)工具使用舉2019-7-18謝謝欣賞36arar用于建立、修改、提取歸檔文件(archive),一個(gè)歸檔文件,是包含多個(gè)被包含文件的單個(gè)文件(也可以認(rèn)為歸檔文件是一個(gè)庫文件)。被包含的原始文件的內(nèi)容、權(quán)限、時(shí)間戳、所有者等屬性都保存在歸檔文件中,并且在提取之后可以還原2019-7-18謝謝欣賞36arar用于建立、修改、提取歸2019-7-18謝謝欣賞37使用ar建立庫文件(1)源程序add.c和minus.c2019-7-18謝謝欣賞37使用ar建立庫文件(1)源程序2019-7-18謝謝欣賞38使用ar建立庫文件(2)編譯成目標(biāo)文件建立庫文件將庫文件拷貝到/usr/lib目錄下Ar的rv參數(shù)的說明:

r:將多個(gè)文件組成一個(gè)文件

v:輸出信息2019-7-18謝謝欣賞38使用ar建立庫文件(2)編譯成2019-7-18謝謝欣賞39庫文件使用舉例

在代碼中使用Add和Minus函數(shù)2019-7-18謝謝欣賞39庫文件使用舉例

在代碼中使用A2019-7-18謝謝欣賞40在編譯時(shí)指定庫文件指明將libtest.a鏈接進(jìn)來運(yùn)行結(jié)果2019-7-18謝謝欣賞40在編譯時(shí)指定庫文件指明將lib2019-7-18謝謝欣賞41nmnm的主要功能是列出目標(biāo)文件中的符號(hào),這樣程序員就可以定位和分析執(zhí)行程序和目標(biāo)文件中的符號(hào)信息和它的屬性2019-7-18謝謝欣賞41nmnm的主要功能是列出目標(biāo)文2019-7-18謝謝欣賞42nm顯示的符號(hào)類型A:符號(hào)的值是絕對(duì)值,并且不會(huì)被將來的鏈接所改變B:符號(hào)位于未初始化數(shù)據(jù)部分(BSS段)C:符號(hào)是公共的。公共符號(hào)是未初始化的數(shù)據(jù)。在鏈接時(shí),多個(gè)公共符號(hào)可能以相同的名字出現(xiàn)。如果符號(hào)在其他地方被定義,則該文件中的這個(gè)符號(hào)會(huì)被當(dāng)作引用來處理D:符號(hào)位于已初始化的數(shù)據(jù)部分T:符號(hào)位于代碼部分U:符號(hào)未被定義?:符號(hào)類型未知,或者目標(biāo)文件格式特殊 2019-7-18謝謝欣賞42nm顯示的符號(hào)類型A:符號(hào)的值2019-7-18謝謝欣賞43nm使用舉例如果對(duì)test可執(zhí)行文件使用nm,會(huì)有什么結(jié)果呢?2019-7-18謝謝欣賞43nm使用舉例如果對(duì)test可執(zhí)2019-7-18謝謝欣賞44objcopy可以將一種格式的目標(biāo)文件內(nèi)容進(jìn)行轉(zhuǎn)換,并輸出為另一種格式的目標(biāo)文件。它使用GNUBFD(binaryformatdescription)庫讀/寫目標(biāo)文件,通過這個(gè)BFD庫,objcopy能以一種不同于源目標(biāo)文件的格式生成新的目標(biāo)文件$objcopy-h在makefile里面用-Obinary選項(xiàng)來生成原始的二進(jìn)制文件,即通常說的image文件2019-7-18謝謝欣賞44objcopy可以將一種格式的2019-7-18謝謝欣賞45Objcopy使用舉例使用file命令查看文件類型生成srec格式的目標(biāo)文件使用file命令查看新文件的類型2019-7-18謝謝欣賞45Objcopy使用舉例使用fi2019-7-18謝謝欣賞46文件格式a.out

assemblerandlinkeditoroutput

匯編器和鏈接編輯器的輸出coff

commonobjectfileformat

一種通用的對(duì)象文件格式ELF

excutivelinkedfile

Linux系統(tǒng)所采用的一種通用文件格式,支持動(dòng)態(tài)連接。ELF格式可以比COFF格式包含更多的調(diào)試信息2019-7-18謝謝欣賞46文件格式a.out

assem2019-7-18謝謝欣賞47文件格式Flat

elf格式有很大的文件頭,flat文件對(duì)文件頭和一些段信息做了簡化

uClinux系統(tǒng)使用flat可執(zhí)行文件格式SREC

MOTOROLAS-Recoder格式(S記錄格式文件)等等2019-7-18謝謝欣賞47文件格式Flat

elf格式有2019-7-18謝謝欣賞48objdump顯示一個(gè)或多個(gè)目標(biāo)文件的信息,由其選項(xiàng)來控制顯示哪些信息。一般來說,objdump只對(duì)那些要編寫編譯工具的程序員有幫助,但是我們通過這個(gè)工具可以方便的查看執(zhí)行文件或者庫文件的信息2019-7-18謝謝欣賞48objdump顯示一個(gè)或多個(gè)目2019-7-18謝謝欣賞49Objdump使用舉例(1)-f選項(xiàng):顯示文件頭中的內(nèi)容2019-7-18謝謝欣賞49Objdump使用舉例(1)-2019-7-18謝謝欣賞50Objdump使用舉例(2)-d選項(xiàng)進(jìn)行反匯編2019-7-18謝謝欣賞50Objdump使用舉例(2)-2019-7-18謝謝欣賞51readelfreadelf軟件顯示一個(gè)或多個(gè)ELF格式的目標(biāo)文件信息。2019-7-18謝謝欣賞51readelfreadelf軟2019-7-18謝謝欣賞52Readelf使用舉例2019-7-18謝謝欣賞52Readelf使用舉例2019-7-18謝謝欣賞53其他GNU工具Gdb—調(diào)試器GNUmake--軟件工程工具diff,patch--補(bǔ)丁工具CVS--版本控制系統(tǒng)2019-7-18謝謝欣賞53其他GNU工具Gdb—調(diào)試器2019-7-18謝謝欣賞54GNUToolchain—gdbGdb=GNUdebugerGNUtools中的調(diào)試器,功能強(qiáng)大設(shè)置斷點(diǎn)監(jiān)視、修改變量單步執(zhí)行顯示/修改寄存器的值堆棧查看遠(yuǎn)程調(diào)試2019-7-18謝謝欣賞54GNUToolchain—g2019-7-18謝謝欣賞55gdb使用舉例(1)源代碼如下編譯:gcc–obugbug.c2019-7-18謝謝欣賞55gdb使用舉例(1)源代碼如下2019-7-18謝謝欣賞56gdb使用舉例(2)

編譯并運(yùn)行????編譯2019-7-18謝謝欣賞56gdb使用舉例(2)

編譯并運(yùn)2019-7-18謝謝欣賞57gdb使用舉例(3)

使用gdb調(diào)試bug運(yùn)行bug輸入字符串出錯(cuò)位置能不能看到源代碼呢?2019-7-18謝謝欣賞57gdb使用舉例(3)

使用gd2019-7-18謝謝欣賞58使用gcc的-g參數(shù)gcc–g–obugbug.c重新調(diào)試源代碼2019-7-18謝謝欣賞58使用gcc的-g參數(shù)gcc–2019-7-18謝謝欣賞592019-7-18謝謝欣賞592019-7-18謝謝欣賞60使用GNUmake管理項(xiàng)目GNUmake是一種代碼維護(hù)工具,在使用GNU編譯器開發(fā)大型應(yīng)用時(shí),往往要使用make管理項(xiàng)目。如果不使用make管理項(xiàng)目,就必須重復(fù)使用多個(gè)復(fù)雜的命令行維護(hù)項(xiàng)目和生成目標(biāo)代碼。Make通過將命令行保存到makefile中簡化了編譯工作。Make的主要任務(wù)是根據(jù)makefile中定義的規(guī)則和步驟,根據(jù)各個(gè)模塊的更新情況,自動(dòng)完成整個(gè)軟件項(xiàng)目的維護(hù)和代碼生成工作。2019-7-18謝謝欣賞60使用GNUmake管理項(xiàng)目G2019-7-18謝謝欣賞61Make可以識(shí)別出makefile中哪些文件已經(jīng)被修改,并且在再次編譯的時(shí)候只編譯這些文件,從而提高編譯的效率Make會(huì)檢查文件的修改和生成時(shí)間戳,如果目標(biāo)文件的修改或者生成時(shí)間戳比它的任意一個(gè)依賴文件舊,則make就執(zhí)行makefile文件中描述的相應(yīng)命令,以便更新目的文件只更新那些需要更新的文件,而不重新處理那些并不過時(shí)的文件2019-7-18謝謝欣賞61Make可以識(shí)別出makefi2019-7-18謝謝欣賞62特點(diǎn):適合于支持多文件構(gòu)成的大中型軟件項(xiàng)目的編譯,鏈接,清除中間文件等管理工作提供和識(shí)別多種默認(rèn)規(guī)則,方便對(duì)大型軟件項(xiàng)目的管理支持對(duì)多目錄的軟件項(xiàng)目進(jìn)行遞歸管理對(duì)軟件項(xiàng)目具有很好的可維護(hù)性和擴(kuò)展性2019-7-18謝謝欣賞62特點(diǎn):2019-7-18謝謝欣賞63makefileMakefile告訴make該做什么、怎么做makefile主要定義了1)依賴關(guān)系

即有關(guān)哪些文件的最新版本是依賴于哪些別的文件產(chǎn)生或者組成的2)需要用什么命令來產(chǎn)生目標(biāo)文件的最新版本3)以及一些其他的功能2019-7-18謝謝欣賞63makefileMakefil2019-7-18謝謝欣賞64Makefile的規(guī)則規(guī)則

一條規(guī)則包含3個(gè)方面的內(nèi)容,1)要?jiǎng)?chuàng)建的目標(biāo)(文件),2)創(chuàng)建目標(biāo)(文件)所依賴的文件列表;3)通過依賴文件創(chuàng)建目標(biāo)文件的命令組2019-7-18謝謝欣賞64Makefile的規(guī)則規(guī)則

一2019-7-18謝謝欣賞65規(guī)則一般形式target...:prerequisites...<tab>command

<tab>...<tab>...例如test:test.c;gcc–O–otesttest.c2019-7-18謝謝欣賞65規(guī)則一般形式2019-7-18謝謝欣賞66一個(gè)簡單的makefileedit:main.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.occ-oeditmain.okbd.ocommand.odisplay.oinsert.o\ search.ofiles.outils.omain.o:main.cdefs.hcc-cmain.ckbd.o:kbd.cdefs.hcommand.hcc-ckbd.ccommand.o:command.cdefs.hcommand.hcc-ccommand.cdisplay.o:display.cdefs.hbuffer.hcc-cdisplay.cinsert.o:insert.cdefs.hbuffer.hcc-cinsert.csearch.o:search.cdefs.hbuffer.hcc-csearch.cfiles.o:files.cdefs.hbuffer.hcommand.hcc-cfiles.cutils.o:utils.cdefs.hcc-cutils.cclean:rmeditmain.okbd.ocommand.odisplay.oinsert.o\ search.ofiles.outils.o2019-7-18謝謝欣賞66一個(gè)簡單的makefileed2019-7-18謝謝欣賞67Make的工作過程defaultgoal

在缺省的情況下,make從makefile中的第一個(gè)目標(biāo)開始執(zhí)行Make的工作過程類似一次深度優(yōu)先遍歷過程2019-7-18謝謝欣賞67Make的工作過程defaul2019-7-18謝謝欣賞68Makefile中的變量使用變量可以降低錯(cuò)誤風(fēng)險(xiǎn)簡化makefileobjects變量($(objects))objects=main.okbd.ocommand.o\ display.oinsert.osearch.ofiles.outils.oedit:$(objects) cc-oedit$(objects)2019-7-18謝謝欣賞68Makefile中的變量使用2019-7-18謝謝欣賞69有點(diǎn)像環(huán)境變量環(huán)境變量在make過程中被解釋成make的變量可以被用來貯存一個(gè)文件名列表。貯存可執(zhí)行文件名。如用變量代替編譯器名。貯存編譯器FLAG2019-7-18謝謝欣賞69有點(diǎn)像環(huán)境變量2019-7-18謝謝欣賞70預(yù)定義變量Make使用了許多預(yù)定義的變量,如ARASCCCXXCFLAGSCPPFLAGS等等2019-7-18謝謝欣賞70預(yù)定義變量Make使用了許多預(yù)2019-7-18謝謝欣賞71簡化后的makefile文件objects=main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.oedit:$(objects)cc-oedit$(objects)main.o:defs.hkbd.o:defs.hcommand.hcommand.o:defs.hcommand.hdisplay.o:defs.hbuffer.hinsert.o:defs.hbuffer.hsearch.o:defs.hbuffer.hfiles.o:defs.hbuffer.hcommand.hutils.o:defs.h.PHONY:cleanclean:rmedit$(objects)2019-7-18謝謝欣賞71簡化后的makefile文件o2019-7-18謝謝欣賞72內(nèi)部變量$@擴(kuò)展成當(dāng)前規(guī)則的目的文件名$<擴(kuò)展成依靠列表中的第一個(gè)依靠文件$^擴(kuò)展成整個(gè)依靠的列表(除掉了里面所有重復(fù)的文件名)等等不需要括號(hào)括住例如:

CC=gcc

CFLAGS=-Wall-O-g

foo.o:foo.cfoo.hbar.h

$(CC)$(CFLAGS)-c$<-o$@2019-7-18謝謝欣賞72內(nèi)部變量$@擴(kuò)展成當(dāng)前規(guī)則的目2019-7-18謝謝欣賞73隱含規(guī)則(ImplicitRules)內(nèi)置的規(guī)則告訴make當(dāng)沒有給出某些命令的時(shí)候,應(yīng)該怎么辦。用戶可以使用預(yù)定義的變量改變隱含規(guī)則的工作方式,如一個(gè)C編譯的具體命令將會(huì)是:$(CC)$(CFLAGS)$(CPPFLAGS)$(TARGET_ARCH)-c$<-o$@2019-7-18謝謝欣賞73隱含規(guī)則(Implicit2019-7-18謝謝欣賞74設(shè)定目標(biāo)(Phon

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論