嵌入式交叉編譯環(huán)境_第1頁
嵌入式交叉編譯環(huán)境_第2頁
嵌入式交叉編譯環(huán)境_第3頁
嵌入式交叉編譯環(huán)境_第4頁
嵌入式交叉編譯環(huán)境_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2024/11/6淮陰師范學院嵌入式系統(tǒng)課程組嵌入式系統(tǒng)導論第2章嵌入式系統(tǒng)交叉編譯環(huán)境2024/11/6第2章嵌入式交叉編譯環(huán)境2.1嵌入式交叉編譯環(huán)境12.2Linux系統(tǒng)安裝22.3Windows和Linux混合開發(fā)模式32.4Linux下常用命令42.5GCC編譯器52.7Make工具的使用782.6GDB調試器62.8嵌入式交叉編譯環(huán)境的搭建2024/11/6嵌入式系統(tǒng)中沒有足夠的硬件資源支持運行開發(fā)工具和調試工具,因此嵌入式軟件開發(fā)采用交叉編譯、調試的方式。一般把交叉編譯的主機稱為宿主機,也就是普通的PC,而把軟件實際運行的環(huán)境稱為目標機。在編譯階段,借助宿主機編譯出目標機的可執(zhí)行代碼,在調試階段,一般應用軟件的調試器和被調試的程序運行在同一臺計算機上,但在嵌入式軟件中,調試器運行在宿主機上,被調試的程序運行在特定的嵌入式系統(tǒng)硬件平臺上,他們之間通過串口或以太網口進行交互。2.1嵌入式交叉編譯環(huán)境簡介2024/11/6交叉開發(fā)環(huán)境:宿主機+調試通道+目標機“在誰的上面編寫運行在誰上的程序的問題”2.1嵌入式交叉編譯環(huán)境簡介2024/11/62.2Linux系統(tǒng)安裝安裝虛擬機VMware在Vmware下進行安裝前的配置在VMware下安裝Linux系統(tǒng)2024/11/6混合開發(fā)模式的必要:由于初學者對Linux系統(tǒng)不是很熟悉,通常會采用Windows下強大的編輯工具,通過共享再在Linux系統(tǒng)下進行編譯、調試等工作。(1)Windows下的文本編輯工具(2)VMware虛擬機設置共享(安裝虛擬機工具)(3)samba服務(提供windows和Linux下程序的共享)(4)nfs服務(提供Linux和Linux下程序的共享)2.3Windows和Linux混合開發(fā)模式2024/11/6(1)VMware虛擬機工具安裝2.3Windows和Linux混合開發(fā)模式2024/11/6(1)VMware虛擬機工具安裝2.3Windows和Linux混合開發(fā)模式解壓縮文件tarzxvfVMwareTools-5.0.0-13124.tar.gz–C/home安裝文件進入解壓縮后的文件夾:cdvmware-tools-distrib/安裝:./vmware-install.pl2024/11/6(1)VMware虛擬機設置共享-12.3Windows和Linux混合開發(fā)模式設置共享2024/11/6(1)VMware虛擬機設置共享-12.3Windows和Linux混合開發(fā)模式訪問共享在Linux的/mnt/hgfs目錄下可以訪問windows下共享的文件夾cd/mnt/hgfs2024/11/62.4Linux下常用命令ls:顯示當前目錄下的所有文件和目錄。ls-a:可以看到隱藏的文件,如以.開頭的文件。pwd:顯示當前目錄路徑。ps:列舉當前TTY下所有進程ps-A:列舉所有cd目錄名:進入目錄mkdir目錄名:創(chuàng)建目錄rmdir目錄名:刪除空目錄rm-rf目錄名:強行刪除整個目錄內容(無法恢復),其中f表示強制不進行提示,r表示目錄遞歸。man表示幫助命令注:LINUX下的文件和目錄是區(qū)分大小寫的。2024/11/62.4Linux下常用命令壓縮備份bzip2:.bz2文件的壓縮程序。bunzip2:.bz2文件的解壓縮程序。tar:備份文件。tar是用來建立,還原備份文件的工具程序,它可以加入,解開備份文件內的文件。

2024/11/62.4Linux下常用命令解壓,.tar.bz2文件:tar-xjf文件名

解壓縮:.bin.gz

gzip-d文件名

例:

把abc.tar解壓到/myftp,命令是啥?

tarxvfabc.tar-C/myftp

bz2

解壓1:bzip2-dFileName.bz2

解壓2:bunzip2FileName.bz2

壓縮:bzip2-zFileName

.tar.bz2

解壓:tarjxvfFileName.tar.bz2

壓縮:tarjcvfFileName.tar.bz2DirName

2024/11/62.4Linux下常用命令.bz

解壓1:bzip2-dFileName.bz

解壓2:bunzip2FileName.bz

壓縮:未知

.tar.bz

解壓:tarjxvfFileName.tar.bz

壓縮:未知

2024/11/62.4Linux下常用命令 .tgz

解壓:tarzxvfFileName.tgz

壓縮:tarFileName.tgzDirName

.tar.tgz

解壓:tarzxvfFileName.tar.tgz

壓縮:tarzcvfFileName.tar.tgzFileName

.zip

解壓:unzipFileName.zip

壓縮:zipFileName.zipDirName

2024/11/62.4Linux下常用命令-文本編輯命令vi(重要)

CommandMode(命令模式)這是執(zhí)行vi后的缺省模式此時鍵盤輸入當作命令命令有大小寫之區(qū)分InputMode(插入模式)使用a、i、o、c、r、s

進入插入模式用戶輸入的任何字符都被vi當做文件內容保存起來,并將其顯示在屏幕上按下ESC鍵即可回到CommandModeLastMode(末行模式)在

CommandLine按下:即可進入該模式用來進行保存文件、打開文檔或環(huán)境的設定命令有大小寫之分2.4Linux下常用命令-文本編輯命令vi

vi的進入和內容輸入進入:

vi文件名輸入文件內容(進入輸入模式)新增(append)

a從光標所在位置后面開始新增內容

A從光標所在行最后面的地方開始新增內容。插入(insert)

i從光標所在位置前面開始插入內容

I從光標所在行的第一個非空白字符前面開始插入資料。開始(open)

o在光標所在行下新增一行并進入輸入模式。

O在光標所在行上新增一行并進入輸入模式。

(命令模式)命令模式1、光標的移動

h

左移一個字符

l右移一個字符

j下移一行

k上移一行

w,W

跳至后一個字的開頭(W忽略標點)

b,B

跳至前一個字的開頭(B忽略標點)

e

移動到后一個字的末尾

^

至本行第一個非空字符

$至行尾

0至行首

H

移動到當前窗口的第一列

M移動到當前窗口的中間列

L

移動到視窗的最后一列

)

光標所在位置到下個句子的第一個字母

(

光標所在位置到該句子的第一個字母

}光標所在位置到該段落的最后一個字母

{

光標所在位置到該段落的第一個字母1、光標的移動(續(xù))nH將光標移到屏幕的第n行

nL將光標移到屏幕的倒數第n行

CTRL-d向下半頁

CTRL-f向下一頁

CTRL-u向上半頁

CTRL-b向上一頁

n-減號移動到上一行的第一個非空白字符,前面加上數字可以指定移動到以上n行

n+加號移動到下一行的第一個非空白字符,前面加上數字可以指定移動到以下n行命令模式2、刪除

x

刪除光標所在字符

X刪除光標前面的字符

s

刪除光標所在字符,并進入輸入模式S

刪除光標所在的行,并進入輸入模式

dd刪除光標所在的行

D從光標位置開始刪除到行尾

d與光標移動命令的組合命令模式3、修改

r

修改光標所在字符,r后接著要修改的字符。如,rc可以用字符“

c”替換光標所指向的當前字符

R

進入替換狀態(tài),新增內容會覆蓋原先內容,直到按[ESC]回到命令模式下為止

cc

修改光標所在行

C

修改從光標位置到該行末尾的內容

c與光標移動命令的組合命令模式4、復制和移動yy復制當前行到內存緩沖區(qū)nyy復制n行內容到內存緩沖區(qū)y與光標移動的組合p將緩沖區(qū)的內容粘貼到光標的后面P將緩沖區(qū)的內容粘貼到光標的前面另:在末行模式下實現(xiàn)移動:n1,n2mn3:把n1到n2行內容搬到第n3行后命令模式5、搜索字符串/pattern移至下一個包含pattern的行?pattern移至上一個包含pattern的行/往下重復查找?往上重復查找n在同一方向重復查找N在相反方向重復查找/pattern/+n移至下一個pattern所在行后的第n行?pattern?-n移至上一個Pattern所在行前的第n行

6、其他

u撤銷前一條命令的結果命令模式*.$^[]{}\/包含在查找字符串中,要用轉義字符(\)末行模式1、文件的保存和退出:w保存:q退出:w!強制保存:q!強制退出:wq保存退出:wq!強制保存退出末行模式2、字符串的替換

:s/str1/str2/用字符串str2替換行中首次出現(xiàn)的字符串str1:s/str1/str2/g用字符串str2替換行中所有出現(xiàn)的字符串str1:.,$s/str1/str2/g用字符串str2替換正文當前行到末尾所有出現(xiàn)的字符串str1:1,$s/str1/str2/g用字符串str2替換正文中所有出現(xiàn)的字符串str1:g/str1/s//str2/g功能同上末行模式其他::n將光標移到第n行編輯多個文件vifile1file2…:n編輯下一個文件:efilename編輯指定文件2024/11/6gcc(GNUCCompiler)能將C、C++語言源程序、匯編語言程序和目標程序編譯、連接成可執(zhí)行文件。是GNU推出的功能強大、性能優(yōu)越的多平臺編譯器,可以在多種硬體平臺上編譯出可執(zhí)行程序,其執(zhí)行效率與一般的編譯器相比平均效率要高20%~30%。

2.5GCC編譯器2024/11/6gcc的執(zhí)行過程使用gcc由C語言源代碼文件生成可執(zhí)行文件的過程要經歷四個相互關聯(lián)的步驟∶

1、預處理(也稱預編譯,Preprocessing)——對頭文件(include)、預編譯語句(如define等)進行分析[預處理器cpp]2、編譯(Compilation)——將預處理后的文件轉換成匯編語言,生成文件.s[編譯器ccl]3、匯編(Assembly)——由匯編變?yōu)槟繕舜a(機器代碼),生成.o的文件[匯編器as]4、連接(Linking)——連接目標代碼,生成可執(zhí)行程序[鏈接器ld]2.5GCC編譯器2024/11/6gcc的執(zhí)行過程(ESc)四個相互關聯(lián)的步驟∶源文件.c1、.c源文件2、生成.i文件3、生成文件.s4、生成.o的文件5、生成可執(zhí)行程序31-E-E-S-S-c-c預處理編譯匯編鏈接2.5GCC編譯器2024/11/6GNUC的使用基本語法

gcc[options][filenames]說明:在gcc后面可以有多個編譯選項,同時進行多個編譯操作。當你不用任何選項編譯一個程序時,GCC將會建立(假定編譯成功)一個名為a.out的可執(zhí)行文件。2.5GCC編譯器2024/11/6gcc選項-o選項你能用-o編譯選項來為將產生的可執(zhí)行文件指定一個文件名來代替a.out。 例:gcc–ocountcount.c-c選項:告訴GCC僅把源代碼編譯為目標代碼,而取消連接的步驟。缺省時GCC建立的目標代碼文件有一個.o的擴展名。 例:gcc–ctest2.c-E只運行C預編譯器。-S編譯選項告訴gcc在為C代碼產生了匯編語言文件后停止編譯。2.5GCC編譯器2024/11/6-includefile功能相當于在代碼中使用#include例子用法:gcc-oexampleexample.c-include/usr/include/stdio.h-I

用來指定頭文件目錄./usr/include目錄一般是不用指定的,但是如果頭文件不在/usr/include里我們就要用-I參數指定了,比如頭文件放在/myinclude目錄里,那編譯命令行就要加上

-Imyinclude參數了,如果不加你會得到一個“xxxx.h:Nosuchfileordirectory”的錯誤。2.5GCC編譯器2024/11/6編譯下列代碼并運行下列代碼#include<stdio.h>intmain(){ doublecounter;doubleresult; doubletemp; for(counter=0;counter<4000.0*4000.0*4000.0/20.0+2030;counter+=(5-3+2+1)/4) { temp=counter/1239; result=counter; } printf("Resultis%lf\n",result); return0;}2.5GCC編譯器2024/11/62.5GCC編譯器2024/11/6Gdb(GNUdebugger)是GNU開發(fā)組織發(fā)布的一個強大的Unix/Linux下的程序調試工具。是一個命令行的調試器,但gdb具有比很多圖形化調試器更強大的功能??梢哉{試各種程序,包括C,C++,JAVA,PASCAL等具有遠程調試功能-對嵌入式非常有用2.6GDB調試器2024/11/6Gdb主要可以完成下面任務:(1)啟動程序,并可以指定某些參數控制程序的運行(2)可讓被調試的程序在用戶所指定的斷點處停?。?)當程序停止時,檢查程序的狀態(tài)(4)動態(tài)地改變程序的參數,可以避過bug,繼續(xù)查找其他的問題2.6GDB調試器2024/11/6gdb<program>

program也就是你的執(zhí)行文件,一般在當前目錄下2.6GDB調試器2024/11/6Gdb的命令可以使用help命令來查看,help命令只是列出gdb的命令種類??梢允褂胔elp<class>命令,顯示class種類中的所有命令??梢允褂胔elp<command>命令,查看command命令的幫助。Gdb中輸入命令時,可以不用輸入命令的全稱,只用輸入命令的前幾個字符就可以。在linux下,可以按兩次TAB鍵來補齊命令的全稱。Gdb中運行Linux的shell程序,如shell<command>。2.6GDB調試器2024/11/63.3GDB調試器2024/11/6加載要調試的執(zhí)行文件file<exec>加載要調試的執(zhí)行程序exec。2.6GDB調試器2024/11/63.3GDB調試器查看源代碼list<linenum>顯示程序第linenum行的周圍的源程序list<function>顯示函數名為function的函數周圍的源程序list顯示當前行后面的源程序list-顯示當前行前面的源程序setlistsizen設置一次顯示源代碼的行數showlistsize查看當前l(fā)istsize的設置2.6GDB調試器2024/11/6設置斷點(BreakPoint)break<function>---進入指定函數時停住。break<linenum>---在指定行號停住2.6GDB調試器2024/11/6清除斷點delete[breakpoints][range]刪除指定的斷點,breakpoints為斷點號,range表示斷點號的范圍(如:2-4)。如果不指定斷點號,則表示刪除所有的斷點。其簡寫命令為d。比刪除更好的一種方法是disable斷點,disable了斷點,gdb不會刪除,當還需要時,enable即可,就好像回收站一樣。2.6GDB調試器2024/11/63.3GDB調試器設置觀察點觀察點一般用來觀察某個表達式的值是否變化了。watch<expr>為表達式(變量)expr設置一個觀察點。一旦表達式值有變化時,馬上停住。infowatchpoints列出當前設置的所有觀察點2.6GDB調試器2024/11/6恢復程序運行和單步調試run(r)從程序開始運行程序continue(c)恢復程序運行,直到程序結束,或是下一個斷點到來。step(s)單步執(zhí)行,進入調用的函數的內部next(n)單步執(zhí)行,不會進入調用的函數內部finish(f)如果已進入了某函數,而想退出該函數返回到它的調用函數中

2.6GDB調試器2024/11/6查看運行時數據print</f><express>查看當前程序的運行數據。</f>為格式。2.6GDB調試器退出GDBquitorq退出GDB2024/11/6練習1(1)鍵入vi,編輯一個新文件gexam.c。其內容如下:#include<stdio.h>main(){inta,i=0;a=0;while(i<10){a=a+2;printf("thevalueofa=%d\n",a);sleep(1);i=i+1;}}2.6GDB調試器2024/11/6練習1(2)保存退出exam.c編譯exam.c。使用gcc-oexamoexam.c使用gcc-g-ogexamexam.c比較gexam與examo的大小,因為gexam含有調試信息,所以gexam比examo大。執(zhí)行gexam與examo執(zhí)行examo鍵入./examo。這里./表示當前目錄執(zhí)行gexam鍵入./gexam。2.6GDB調試器2024/11/6練習1(3)使用gdb調試程序(1)啟動gdb程序(gdb)gdb(2)讀入調試程序(gdb)filegexam(3)列出相應于正在執(zhí)行的程序的原文件內容(gdb)list(4)在程序a=0;處設置一個斷點

(gdb)break4(注:這里4為程序a=0;所在程序的行號,若自己更改)(5)在程序printf(“thevalueofa=%d\n”,a);處設置一個斷點(6)執(zhí)行該程序(gdb)run(7)查看變量a的值(gdb)printa(8)查看變量a的類型(gdb)whatisa(9)執(zhí)行下一個源程序行(gdb)next(10)從斷點開始繼續(xù)執(zhí)行到下一個斷點(gdb)continue(11)查看變量a的值(gdb)printa,看看a是否有變化(12)不停地執(zhí)行(gdb)continue,直到程序結束。(13)退出gdbquit2.6GDB調試器2024/11/6練習2:程序功能為先顯示一個字符串,再反序顯示,使用GDB找出其中的錯誤并改正#include<stdio.h>#include<string.h>voidmy_print(char*string){printf("Thestringis%s\n",string);}voidmy_print2(char*string){char*string2;intsize,i;size=strlen(string);string2=(char*)malloc(size+1);for(i=0;i<size;i++)string2[size-i]=string[i];string2[size+1]='\0';printf("Thestringprintedbackwardis%s\n",string2);}

2.6GDB調試器2024/11/6練習2:程序功能為先顯示一個字符串,再反序顯示,使用GDB找出其中的錯誤并改正intmain(){charmy_string[]="helloLinux";my_print(my_string);my_print2(my_string);return;}2.6GDB調試器2024/11/63.4make工具的使用Make工具及makefile文件概述Makefile基本知識Makefile應用

1)為單個文件編寫makefile2)為多個文件編寫makefile3)使用不同目錄的文件的makefile的寫法2024/11/62.7Make工具及makefile文件概述GNUMake是程序自動維護工具在大型的開發(fā)項目中,通常有幾十到上百個的源文件,如果每次均手工鍵入gcc命令進行編譯的話,則會非常不方便。因此,人們通常利用make工具來自動完成編譯工作。這些工作包括:

1)如果僅修改了某幾個源文件,則只重新編譯這幾個源文件;

2)如果某個頭文件被修改了,則重新編譯所有包含該頭文件的源文件。2024/11/6Makefile基本知識基本makefile結構Makefile由一系列規(guī)則組成,規(guī)則格式如下:其中:target-需要由make工具創(chuàng)建的項目,通常是目的文件和可執(zhí)行文件。通常使用“目標(target)”一詞來表示要創(chuàng)建的項目。prerequisites-要創(chuàng)建的項目依賴于哪些文件。command

-創(chuàng)建每個項目時需要運行的命令。注:命令前面需要敲入tab鍵,而不是空格?。?!target:prerequisites依賴關系<TAB>command命令2024/11/6Make工具及makefile文件概述Make及makefile原理GNUmake的主要工作是讀進文本文件makefile。這些文件主要是有關那些文件(目的文件)是從哪些別的文件(依靠文件)中產生的,用什么命令來進行這個產生的過程。有了這些信息,make會檢查磁盤上的文件,如果目的文件的時間比至少它的一個依靠文件舊,Make將執(zhí)行相應的命令,以便更新目的文件。目的文件不一定是最后的可執(zhí)行文件,它可以是任何一個文件。

2024/11/6Makefile基本知識Makefile實例:#makefile開始myprog

:

foo.o

bar.o

gcc

foo.o

bar.o

-o

myprog

foo.o

:

foo.c

foo.h

bar.h

gcc

-c

foo.c

-o

foo.o

bar.o

:

bar.c

bar.h

gcc

-c

bar.c

-o

bar.o

clean: -rm*.omyprog#makefile結束2024/11/6Makefile基本知識實例說明從上面的例子注意到,第一個字符為#的行為注釋行。第一個非注釋行指定myprog為目標,并且依賴于foo.o

和bar.o

文件。foo.o

和bar.o文件又各自有自己的依賴規(guī)則makefile中一般都有clean規(guī)則,在重新編譯之前刪除以前生成的各個文件,此條規(guī)則沒有依賴文件使用make工具的執(zhí)行makefile的命令為:

make或makemakefile)缺省文件名為當前目錄下的makefile或Makefile或GNUmakefile,也可以使用命令行參數-f指定文件名:

例如make–ffilename2024/11/6Makefile基本知識實例說明如果沒有“-f”參數,在Linux中,GNUmake工具在當前工作目錄中按照GNUmakefile、makefile、Makefile的順序搜索makefile文件。通過命令行參數中的target,可指定make要編譯的目標,并且允許同時定義編譯多個目標,操作時按照從左向右的順序依次編譯target選項中指定的目標文件。如果命令行中沒有指定目標,則系統(tǒng)默認target指向描述文件中第一個目標文件。如#make

#makeclean2024/11/6Makefile基本知識Makefile變量環(huán)境變量: (1)存儲文件名列表。 (2)存儲可執(zhí)行文件名。 (3)存儲編譯器標識。(4)存儲參數列表。

比如我們利用makefile變量把上面的makefile文件重寫一遍。2024/11/6Makefile基本知識Makefile變量使用環(huán)境變量后的makefile實例=======makefile開始======OBJS=foo.obar.oCC=gccCFLAGS=-Wall–O–gEXEC=myprog$(EXEC):$(OBJS) $(CC)$(OBJS)–o$(EXEC)foo.o:foo.cfoo.hbar.h $(CC)$(CFLAGS)–cfoo.c–ofoo.obar.o:bar.cbar.h $(CC)$(CFLAGS)bar.c–obar.o========makefile結束=======2024/11/6Makefile基本知識Makefile變量內部變量:$@---擴展成當前規(guī)則的目的文件名$<---擴展成依靠列表中的第一個依靠文件$^---擴展成整個依靠的列表利用這些變量,可以把上面的makefile寫成:2024/11/6Makefile基本知識Makefile變量=====makefile開始======OBJS=foo.obar.oCC=gccCFLAG=-Wall–O–gmyprog:$(OBJS) $(CC)$^-o$@foo.o:foo.cfoo.hbar.h $(CC)$(CFLAG)–c$<-o$@bar.o:bar.cbar.h $(CC)$(CFLAG)–c$<-o$@======makefile結束=======2024/11/6Makefile應用為單個文件編寫makefile為多個文件編寫makefile使用不同目錄的文件的makefile的寫法多個子模塊的文件的makefile寫法2024/11/6Makefile應用為單個文件編寫makefile編寫hello.c程序#include<stdio.h>intmain(void){printf("Helloworld!\n");return0;}2024/11/6Makefile應用執(zhí)行:$viMakefile=====makefile開始======#ThisisasampleCC=gccall:hello.o $(CC)–ohellohello.ohello.o:hello.c $(CC)–c–ohello.ohello.cclean: rm*.ohello======makefile結束=======2024/11/6Makefile應用為多個文件編寫makefile有四個文件menu.c,music.c,picture.c,menu.h/****************menu.c************************/#include<stdio.h>#include“menu.h”intmain(void){ intchoice;printf("----welcomeyou!-----\n");printf("***1music!***\n");printf("***2picture!***\n");printf("----haveachoice!-----\n");scanf("%d",&choice);

switch(choice) { case1: music(); break; case2: picture(); break; } printf("GoodBye!\n");return0;}2024/11/6Makefile應用為多個文件編寫makefile/****************music.c****************/#include<stdio.h>

#include<stdio.h>voidmusic(void){printf("Listentomusic!\n");}2024/11/6Makefile應用為多個文件編寫makefile/****************picture.c****************/

#include<stdio.h>voidpicture(void){printf("Havealookatpicture!\n");}2024/11/6Makefile應用為多個文件編寫makefile/****************menu.h****************/

voidmusic(void);voidpicture(void);2024/11/6Makefile應用為多個文件編寫makefile幾個文件間的依賴關系menumusic.omenu.opicture.omenu.hpicture.cmenu.cmusic.c2024/11/6Makefile應用上面程序的makefile:=====makefile開始======CC=gccall:menu.omusic.opicture.o $(CC)menu.omusic.opicture.o-omenumenu.o:menu.cmenu.h $(CC)-cmenu.c-omenu.omusic.o:music.c $(CC)-cmusic.c-omusic.opicture.o:picture.c $(CC)-cpicture.c-opicture.oclean: rm*.omenu======makefile結束=======2024/11/6Makefile應用上面程序的makefile:實際上,可以用$@代表目標文件,$<代表源文件,于是可以將makefile寫成這樣:=====makefile開始======CC=gccall:menu.omusic.opicture.o $(CC)$^-omenumenu.o:menu.cmenu.h $(CC)-c$<-o$@music.o:music.c $(CC)-c$<-o$@picture.o:picture.c $(CC)-c$<-o$@clean: rm*.omenu======makefile結束=======2024/11/6Makefile應用上面程序的makefile:由于各個文件的編譯命令幾乎沒有什么差別,可以使用通配符%或*進一步簡化

:=====makefile開始======CC=gccall:menu.omusic.opicture.o $(CC)$^-omenu%.o:%.c $(CC)-c-o$@$<clean: rm*.omenu======makefile結束=======2024/11/6Makefile應用使用不同目錄的文件的makefile的寫法假設程序的目錄結構如下:---bin存放生成的可執(zhí)行文件(menu)---obj存放.o文件(menu.o,music.o,picture.o)---include存放.h文件(menu.h)---s

溫馨提示

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

評論

0/150

提交評論