版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2022/8/20嵌入式交叉編譯環(huán)境1嵌入式交叉編譯環(huán)境12NFS服務(wù)23Samba服務(wù)34Windows和Linux混合開發(fā)模式45GCC編譯器57Make工具的使用78嵌入式交叉編譯環(huán)境的搭建86GDB調(diào)試器62022/8/20交叉開發(fā)環(huán)境:宿主機調(diào)試通道目標機“在誰的上面編寫運行在誰上的程序的問題”1嵌入式交叉編譯環(huán)境簡介 交叉編譯就是在一個平臺上生成另一個平臺上的可執(zhí)行代碼。 這里說的平臺分別指的是主機平臺Host和目標平臺Target。 就我們在ARM平臺上移植Linux來說,Host是一臺一般的PC機,它通過串口或網(wǎng)絡(luò)接口與Target通信;Target是arm-linux平臺(這
2、里說的arm指的是平臺所使用的CPU是ARM9處理器,linux指的是運行的操作系統(tǒng)是Linux)。 我們在Host上開發(fā)程序,并在這個平臺上運行交叉編譯器Cross Complier,編譯我們的程序,而由Cross Complier生成的程序?qū)⒃赥arget上運行。 需要交叉編譯的原因: 首先,在項目的起始階段,目標平臺尚未建立,因此需要做交叉編譯,以生成我們所需要的Boot loader以及kernel(因為Bootloader和kernel的源碼需要經(jīng)過交叉編譯后才可以在目標平臺上運行); 其次,當目標平臺能啟動之后,由于目標平臺上資源的限制,當我們編譯大型程序時,依然可能需要用到交叉編
3、譯。2022/8/20嵌入式交叉編譯環(huán)境1嵌入式交叉編譯環(huán)境12NFS服務(wù)23Samba服務(wù)34Windows和Linux混合開發(fā)模式45GCC編譯器57Make工具的使用78嵌入式交叉編譯環(huán)境的搭建86GDB調(diào)試器62 NFS服務(wù)NFS服務(wù)可以使網(wǎng)絡(luò)上的同為Linux或Unix系統(tǒng)主機共享文件系統(tǒng)。NFS可以將遠程文件系統(tǒng)載入在本地文件系統(tǒng)下。遠程的硬盤、目錄和光驅(qū)都可以變成本地主機目錄樹中的一個子目錄。載入后與處理自己的文件系統(tǒng)一樣使用即可。不只方便,也節(jié)省了重復(fù)保存文件的空間、傳輸文件的時間及網(wǎng)絡(luò)帶寬。2022/8/202 NFS服務(wù)NFS特點NFS系統(tǒng)也是使用C/S體系結(jié)構(gòu),就是有服務(wù)
4、器端與客戶端服務(wù)器端提供共享的文件系統(tǒng),必須把文件系統(tǒng)輸出(export)出去客戶端則要把文件系統(tǒng)載入到自己的系統(tǒng)下使用NFS,需要在服務(wù)器端設(shè)置輸出,在客戶端設(shè)置載入2022/8/202 NFS服務(wù)NFS服務(wù)器端配置(1)關(guān)閉防火墻(2)配置共享目錄-客戶端主機IP范圍(3)主機IP(4)啟動NFS服務(wù)2022/8/20NFS客戶端(1)設(shè)置客戶端IP地址(2)掛載共享目錄mount -t nfs 主機ip:共享目錄 掛載點注意事項:關(guān)閉防火墻,主機與客戶端在同一ip段mount -t nfs o nolock 主機ip:/arm2410s /host2 NFS服務(wù)具體配置步驟服務(wù)器端1)關(guān)
5、閉防火墻2022/8/202 NFS服務(wù)2022/8/202)配置NFS服務(wù)器2 NFS服務(wù)2022/8/202-1)設(shè)置共享目錄和主機范圍2 NFS服務(wù)2022/8/202-2)設(shè)置其他選項2 NFS服務(wù)2022/8/202-3)設(shè)置其他選項2 NFS服務(wù)3)設(shè)置NFS服務(wù)器的IP2022/8/202 NFS服務(wù)4)啟動NFS服務(wù)2022/8/202 NFS服務(wù)客戶端1)配置ip2022/8/202 NFS服務(wù)2)掛載NFS2022/8/202022/8/20 嵌入式交叉編譯環(huán)境1嵌入式交叉編譯環(huán)境12NFS服務(wù)23Samba服務(wù)34Windows和Linux混合開發(fā)模式45GCC編譯器57
6、Make工具的使用78嵌入式交叉編譯環(huán)境的搭建86GDB調(diào)試器6Samba服務(wù)可實現(xiàn)Windows和Linux不同系統(tǒng)間交換文件共享。 2022/8/203 Samba服務(wù)具體設(shè)置步驟服務(wù)器端1)關(guān)閉防火墻(同NFS)2022/8/203 Samba服務(wù)2)配置Samba服務(wù)器2022/8/203 Samba服務(wù)2022/8/202-1)設(shè)置共享目錄和訪問權(quán)限3 Samba服務(wù)2022/8/203 Samba服務(wù)2-2)設(shè)置共享目錄和訪問權(quán)限2022/8/203 Samba服務(wù)2022/8/203 Samba服務(wù)2-4)服務(wù)器設(shè)置2022/8/203 Samba服務(wù)2-4)服務(wù)器設(shè)置2022/
7、8/203)配置Samba服務(wù)器主機ip3 Samba服務(wù)2022/8/204)啟動Samba服務(wù)3 Samba服務(wù)客戶端1)配置Windows 的IP只要和你開的服務(wù)器IP在同一網(wǎng)段就行 2022/8/203 Samba服務(wù)2)在Windows上訪問共享2022/8/203 Samba服務(wù)3)訪問成功2022/8/203 Samba服務(wù)2022/8/20嵌入式交叉編譯環(huán)境1嵌入式交叉編譯環(huán)境12NFS服務(wù)23Samba服務(wù)34Windows和Linux混合開發(fā)模式45GCC編譯器57Make工具的使用78嵌入式交叉編譯環(huán)境的搭建86GDB調(diào)試器6混合開發(fā)模式的必要: 由于初學者對Linux系
8、統(tǒng)不是很熟悉,通常會采用Windows下強大的編輯工具,通過共享再在Linux系統(tǒng)下進行編譯、調(diào)試等工作。(1)VMware虛擬機設(shè)置共享(2)SSH客戶端軟件(3)Windows下的文本編輯工具2022/8/204 Windows和Linux混合開發(fā)模式(1)VMware虛擬機設(shè)置共享-12022/8/204 Windows和Linux混合開發(fā)模式(1)VMware虛擬機設(shè)置共享-22022/8/204 Windows和Linux混合開發(fā)模式解壓縮文件 tar zxvf VMwareTools-5.0.0-13124.tar.gz C /home安裝文件 進入解壓縮后的文件夾:cd vmwa
9、re-tools-distrib/ 安裝:./vmware-install.pl(1)VMware虛擬機設(shè)置共享-32022/8/204 Windows和Linux混合開發(fā)模式設(shè)置共享 (2)SSH客戶端軟件2022/8/204 Windows和Linux混合開發(fā)模式SSH的英文全稱:Secure ShellSSH把所有傳輸?shù)臄?shù)據(jù)進行加密,并且SSH客戶端軟件可將傳輸?shù)臄?shù)據(jù)進行壓縮后再傳輸。(1)PuTTY(2)Secure Shell Client(3)Windows下的文本編輯工具2022/8/204 Windows和Linux混合開發(fā)模式 UltraEdit-32 Source Insi
10、ght2022/8/20 嵌入式交叉編譯環(huán)境1嵌入式交叉編譯環(huán)境12NFS服務(wù)23Samba服務(wù)34Windows和Linux混合開發(fā)模式45GCC編譯器57Make工具的使用78嵌入式交叉編譯環(huán)境的搭建86GDB調(diào)試器6gcc(GNU C Compiler) 能將C、C+語言源程序、匯編語言程序和目標程序編譯、連接成可執(zhí)行文件。是GNU推出的功能強大、性能優(yōu)越的多平臺編譯器,可以在多種硬體平臺上編譯出可執(zhí)行程序,其執(zhí)行效率與一般的編譯器相比平均效率要高20%30%。 2022/8/205 GCC編譯器gcc的執(zhí)行過程 使用gcc由C語言源代碼文件生成可執(zhí)行文件的過程要經(jīng)歷四個相互關(guān)聯(lián)的步驟
11、1、預(yù)處理(也稱預(yù)編譯,Preprocessing) 對頭文件(include)、預(yù)編譯語句(如define等)進行分析預(yù)處理器cpp2、編譯(Compilation)將預(yù)處理后的文件轉(zhuǎn)換成匯編語言,生成文件.s編譯器ccl3、匯編(Assembly)由匯編變?yōu)槟繕舜a(機器代碼),生成.o的文件匯編器as4、連接(Linking) 連接目標代碼,生成可執(zhí)行程序鏈接器ld 2022/8/205 GCC編譯器gcc的執(zhí)行過程(ESc)四個相互關(guān)聯(lián)的步驟源文件.c1、.c源文件2、生成.i文件3、生成文件.s4、生成.o的文件5、生成可執(zhí)行程序2022/8/2042-E-E-S-S-c-c預(yù)處理編
12、譯匯編鏈接5 GCC編譯器GNU C 的使用基本語法 gcc options filenames說明:在gcc后面可以有多個編譯選項,同時進行多個編譯操作。當你不用任何選項編譯一個程序時,GCC將會建立(假定編譯成功)一個名為a.out的可執(zhí)行文件。 2022/8/205 GCC編譯器gcc選項-o選項 你能用 -o 編譯選項來為將產(chǎn)生的可執(zhí)行文件指定一個文件名來代替 a.out。 例:gcc o count count.c-c選項:告訴GCC僅把源代碼編譯為目標代碼, 而取消連接的步驟。缺省時GCC建立的目標代碼文件有一個.o的擴展名。 例:gcc c test2.c-E 只運行 C 預(yù)編譯
13、器。 -S 編譯選項告訴 gcc 在為 C 代碼產(chǎn)生了匯編語言文件后停止編譯。2022/8/205 GCC編譯器-include file功能相當于在代碼中使用#include例子用法:gcc -o example example.c -include /usr/include/stdio.h-I 用來指定頭文件目錄. /usr/include目錄一般是不用指定的,但是如果頭文件不在/usr/include里我們就要用-I參數(shù)指定了,比如頭文件放在/myinclude目錄里,那編譯命令行就要加上 - Imyinclude參數(shù)了,如果不加你會得到一個“xxxx.h: No such file o
14、r directory”的錯誤。2022/8/205 GCC編譯器2022/8/20嵌入式交叉編譯環(huán)境1嵌入式交叉編譯環(huán)境12NFS服務(wù)23Samba服務(wù)34Windows和Linux混合開發(fā)模式45GCC編譯器57Make工具的使用78嵌入式交叉編譯環(huán)境的搭建86GDB調(diào)試器6Gdb(GNU debugger)是GNU開發(fā)組織發(fā)布的一個強大的Unix/Linux下的程序調(diào)試工具。是一個命令行的調(diào)試器,但gdb具有比很多圖形化調(diào)試器更強大的功能。可以調(diào)試各種程序,包括C,C+,JAVA,PASCAL等具有遠程調(diào)試功能對嵌入式非常有用2022/8/206 GDB調(diào)試器Gdb主要可以完成下面任務(wù):
15、(1)啟動程序,并可以指定某些參數(shù)控制程序的運行(2)可讓被調(diào)試的程序在用戶所指定的斷點處停?。?)當程序停止時,檢查程序的狀態(tài)(4)動態(tài)地改變程序的參數(shù),可以避過bug,繼續(xù)查找其他的問題2022/8/206 GDB調(diào)試器gdb program也就是你的執(zhí)行文件,一般在當前目錄下2022/8/206 GDB調(diào)試器Gdb的命令可以使用help命令來查看,help命令只是列出gdb的命令種類??梢允褂胔elp命令,顯示class種類中的所有命令??梢允褂胔elp命令,查看command命令的幫助。Gdb中輸入命令時,可以不用輸入命令的全稱,只用輸入命令的前幾個字符就可以。在linux下,可以按兩
16、次TAB鍵來補齊命令的全稱。Gdb中運行Linux的shell程序,如shell 。2022/8/206 GDB調(diào)試器3.3 GDB調(diào)試器2022/8/20加載要調(diào)試的執(zhí)行文件file 加載要調(diào)試的執(zhí)行程序exec。2022/8/206 GDB調(diào)試器3.3 GDB調(diào)試器查看源代碼list 顯示程序第linenum行的周圍的源程序list 顯示函數(shù)名為function的函數(shù)周圍的源程序list 顯示當前行后面的源程序list - 顯示當前行前面的源程序set listsize n設(shè)置一次顯示源代碼的行數(shù)show listsize查看當前l(fā)istsize的設(shè)置2022/8/206 GDB調(diào)試器設(shè)置
17、斷點(BreakPoint)break-進入指定函數(shù)時停住。break-在指定行號停住2022/8/206 GDB調(diào)試器清除斷點delete breakpoints range刪除指定的斷點,breakpoints為斷點號,range表示斷點號的范圍(如:2-4)。如果不指定斷點號,則表示刪除所有的斷點。其簡寫命令為d。比刪除更好的一種方法是disable斷點,disable了斷點,gdb不會刪除,當還需要時,enable即可,就好像回收站一樣。2022/8/206 GDB調(diào)試器3.3 GDB調(diào)試器設(shè)置觀察點觀察點一般用來觀察某個表達式的值是否變化了。watch 為表達式(變量)expr設(shè)置一
18、個觀察點。一旦表達式值有變化時,馬上停住。info watchpoints列出當前設(shè)置的所有觀察點2022/8/206 GDB調(diào)試器恢復(fù)程序運行和單步調(diào)試run (r)從程序開始運行程序continue (c)恢復(fù)程序運行,直到程序結(jié)束,或是下一個斷點到來。step (s)單步執(zhí)行,進入調(diào)用的函數(shù)的內(nèi)部next (n)單步執(zhí)行,不會進入調(diào)用的函數(shù)內(nèi)部finish (f)如果已進入了某函數(shù),而想退出該函數(shù)返回到它的調(diào)用函數(shù)中 2022/8/206 GDB調(diào)試器查看運行時數(shù)據(jù)print 查看當前程序的運行數(shù)據(jù)。為格式。2022/8/206 GDB調(diào)試器退出GDBquit or q 退出 GDB練習
19、1(1)鍵入vi,編輯一個新文件gexam.c。其內(nèi)容如下:#include main() int a,i=0; a=0; while(i10) a=a+2; printf(the value of a=%d n,a); sleep(1); i=i+1; 2022/8/206 GDB調(diào)試器練習1(2)保存退出exam.c 編譯exam.c 。使用 gcc -o examo exam.c 使用 gcc - g -o gexam exam.c比較gexam 與 examo的大小,因為 gexam含有調(diào)試信息,所以gexam比 examo大。執(zhí)行g(shù)exam與examo 執(zhí)行examo 鍵入 ./ex
20、amo 。這里./表示當前目錄執(zhí)行g(shù)exam 鍵入 ./gexam。2022/8/206 GDB調(diào)試器練習1(3)使用gdb調(diào)試程序(1)啟動gdb程序 (gdb)gdb(2)讀入調(diào)試程序 (gdb)file gexam(3)列出相應(yīng)于正在執(zhí)行的程序的原文件內(nèi)容 (gdb)list(4)在程序a=0;處設(shè)置一個斷點 (gdb)break 4(注:這里4 為程序a=0;所在程序的行號,若自己更改)(5)在程序printf(“the value of a=%d n”,a);處設(shè)置一個斷點(6)執(zhí)行該程序 (gdb)run(7)查看變量a的值 (gdb)print a(8)查看變量a的類型(gdb)
21、whatis a(9)執(zhí)行下一個源程序行(gdb)next(10)從斷點開始繼續(xù)執(zhí)行到下一個斷點 (gdb)continue(11)查看變量a的值(gdb) print a ,看看a是否有變化(12)不停地執(zhí)行(gdb)continue,直到程序結(jié)束。(13)退出gdb quit2022/8/206 GDB調(diào)試器練習2:程序功能為先顯示一個字符串,再反序顯示,使用GDB找出其中的錯誤并改正#include void my_print(char *string) printf (The string is %sn, string); void my_print2 (char *string) c
22、har *string2; int size, i; size = strlen (string); string2 = (char *) malloc (size + 1); for (i = 0; i size; i+) string2size - i = stringi; string2size+1 = 0; printf (The string printed backward is %sn, string2); 2022/8/206 GDB調(diào)試器練習2:程序功能為先顯示一個字符串,再反序顯示,使用GDB找出其中的錯誤并改正int main() char my_string = hel
23、lo there; my_print (my_string); my_print2 (my_string); return; 2022/8/206 GDB調(diào)試器2022/8/20嵌入式交叉編譯環(huán)境1嵌入式交叉編譯環(huán)境12NFS服務(wù)23Samba服務(wù)34Windows和Linux混合開發(fā)模式45GCC編譯器57Make工具的使用78嵌入式交叉編譯環(huán)境的搭建86GDB調(diào)試器63.4 make工具的使用Make工具及makefile文件概述Makefile基本知識Makefile應(yīng)用 1)為單個文件編寫makefile 2)為多個文件編寫makefile 3)使用不同目錄的文件的makefile的寫
24、法2022/8/20Make工具及makefile文件概述GNU Make是程序自動維護工具在大型的開發(fā)項目中,通常有幾十到上百個的源文件,如果每次均手工鍵入 gcc 命令進行編譯的話,則會 非常不方便。因此,人們通常利用 make 工具來自動完成編譯工作。這些工作包括: 1)如果僅修改了某幾個 源文件,則只重新編譯這幾個源文件; 2)如果某個頭文件被修改了,則重新編譯所有包含該頭文件的源文件。2022/8/20Makefile基本知識基本makefile結(jié)構(gòu)Makefile由一系列規(guī)則組成,規(guī)則格式如下:其中:target需要由 make 工具創(chuàng)建的項目,通常是目的文件和可執(zhí)行文件。通常使用
25、“目標(target)”一詞來表示要創(chuàng)建的項目。prerequisites 要創(chuàng)建的項目依賴于哪些文件。command 創(chuàng)建每個項目時需要運行的命令。注:命令前面需要敲入tab鍵,而不是空格!2022/8/20target : prerequisites 依賴關(guān)系 command 命令Make工具及makefile文件概述Make及makefile原理GNU make的主要工作是讀進文本文件makefile。這些文件主要是有關(guān)那些文件(目的文件)是從哪些別的文件(依靠文件)中產(chǎn)生的,用什么命令來進行這個產(chǎn)生的過程。有了這些信息,make會檢查磁盤上的文件,如果目的文件的時間比至少它的一個依靠文
26、件舊,Make將執(zhí)行相應(yīng)的命令,以便更新目的文件。目的文件不一定是最后的可執(zhí)行文件,它可以是任何一個文件。 2022/8/20Makefile基本知識Makefile實例:makefile開始myprog:foo.obar.ogccfoo.obar.o-omyprogfoo.o:foo.cfoo.hbar.hgcc-cfoo.c-ofoo.obar.o:bar.cbar.hgcc-cbar.c-obar.oclean:-rm *.o myprogmakefile結(jié)束2022/8/20Makefile基本知識實例說明從上面的例子注意到,第一個字符為 # 的行為注釋行。第一個非注釋行指定 mypr
27、og為目標,并且依賴于 foo.o和bar.o 文件。foo.o和bar.o文件又各自有自己的依賴規(guī)則makefile中一般都有clean規(guī)則,在重新編譯之前刪除以前生成的各個文件,此條規(guī)則沒有依賴文件使用make工具的執(zhí)行makefile的命令為: make或make makefile)缺省文件名為當前目錄下的makefile或Makefile或 GNUmakefile ,也可以使用命令行參數(shù)f指定文件名: 例如 make f filename2022/8/20Makefile基本知識實例說明如果沒有“-f”參數(shù),在Linux中, GNU make 工具在當前工作目錄中按照GNUmakefi
28、le、makefile、Makefile的順序搜索 makefile文件。 通過命令行參數(shù)中的target ,可指定make要編譯的目標,并且允許同時定義編譯多個目標,操作時按照從左向右的順序依次編譯target選項中指定的目標文件。如果命令行中沒有指定目標,則系統(tǒng)默認target指向描述文件中第一個目標文件。 如 make make clean2022/8/20Makefile基本知識Makefile變量環(huán)境變量:(1)存儲文件名列表。(2)存儲可執(zhí)行文件名。(3)存儲編譯器標識。 (4)存儲參數(shù)列表。 比如我們利用makefile變量把上面的makefile文件重寫一遍。2022/8/20
29、Makefile基本知識Makefile變量使用環(huán)境變量后的makefile實例=makefile開始=OBJS=foo.o bar.oCC=gccCFLAGS=-Wall O gEXEC=myprog$(EXEC):$(OBJS)$(CC) $(OBJS) o $(EXEC)foo.o:foo.c foo.h bar.h$(CC) $(CFLAGS) c foo.c o foo.obar.o:bar.c bar.h$(CC) $(CFLAGS)bar.c o bar.o=makefile結(jié)束=2022/8/20Makefile基本知識Makefile變量內(nèi)部變量:$-擴展成當前規(guī)則的目的文件
30、名$ -擴展成依靠列表中的第一個依靠文件$ -擴展成整個依靠的列表利用這些變量,可以把上面的makefile寫成:2022/8/20Makefile基本知識Makefile變量=makefile開始=OBJS = foo.o bar.oCC = gccCFLAG =-Wall O gmyprog:$(OBJS)$(CC) $ -o $foo.o:foo.c foo.h bar.h$(CC) $(CFLAG) c $ -o $bar.o:bar.c bar.h$(CC) $(CFLAG) c $ -o $=makefile結(jié)束=2022/8/20Makefile應(yīng)用為單個文件編寫makefile
31、為多個文件編寫makefile使用不同目錄的文件的makefile的寫法多個子模塊的文件的makefile寫法2022/8/20Makefile應(yīng)用為單個文件編寫makefile編寫hello.c程序#include int main(void) printf(Hello world!n); return 0;2022/8/20Makefile應(yīng)用執(zhí)行: $ vi Makefile=makefile開始=# This is a sampleCC = gccall:hello.o$(CC) o hello hello.ohello.o:hello.c$(CC) c o hello.o hello
32、.cclean:rm *.o hello=makefile結(jié)束=2022/8/20Makefile應(yīng)用為多個文件編寫makefile有四個文件menu.c,music.c,picture.c,menu.h/*menu.c*/2022/8/20#include#include“menu.h”int main(void) int choice; printf(-welcome you ! -n); printf( * 1 music! *n); printf( * 2 picture! *n); printf(-have a choice!-n); scanf(d,&choice);switch(
33、choice) case 1:music();break;case 2:picture();break; printf(Good Bye!n); return 0;Makefile應(yīng)用為多個文件編寫makefile/*music.c*/ #include #include void music(void) printf(Listen to music!n); 2022/8/20Makefile應(yīng)用為多個文件編寫makefile/*picture.c*/ #includevoid picture(void) printf(Have a look at picture!n);2022/8/20Ma
34、kefile應(yīng)用為多個文件編寫makefile/* menu.h */ void music(void); void picture(void);2022/8/20Makefile應(yīng)用為多個文件編寫makefile幾個文件間的依賴關(guān)系2022/8/20menumusic.omenu.opicture.omenu.hpicture.cmenu.cmusic.cMakefile應(yīng)用上面程序的makefile:=makefile開始=CC=gccall:menu.o music.o picture.o$(CC) menu.o music.o picture.o -o menumenu.o:menu.
35、c menu.h$(CC) -c menu.c -o menu.omusic.o:music.c $(CC) -c music.c -o music.opicture.o:picture.c $(CC) -c picture.c -o picture.oclean:rm *.o menu=makefile結(jié)束=2022/8/20Makefile應(yīng)用上面程序的makefile:實際上,可以用$代表目標文件,$代表源文件,于是可以將makefile寫成這樣:=makefile開始=CC=gccall:menu.o music.o picture.o$(CC) $ -o menumenu.o:men
36、u.c menu.h$(CC) -c $ -o $music.o:music.c $(CC) -c $ -o $picture.o:picture.c $(CC) -c $ -o $clean:rm *.o menu=makefile結(jié)束=2022/8/20Makefile應(yīng)用上面程序的makefile:由于各個文件的編譯命令幾乎沒有什么差別,可以使用通配符%或*進一步簡化 :=makefile開始=CC=gccall:menu.o music.o picture.o$(CC) $ -o menu%.o:%.c$(CC) -c -o $ $clean:rm *.o menu=makefile結(jié)
37、束=2022/8/20Makefile應(yīng)用使用不同目錄的文件的makefile的寫法假設(shè)程序的目錄結(jié)構(gòu)如下:bin 存放生成的可執(zhí)行文件(menu)obj 存放.o文件(menu.o,music.o,picture.o)include 存放.h文件(menu.h)src 存放源程序文件和makefile(menu.c,picture.c,music.c)2022/8/20Makefile應(yīng)用=makefile開始=CC=gccall:./obj/menu.o ./obj/music.o ./obj/picture.o$(CC) -o ./bin/menu $./obj/menu.o:./menu.c ./include/menu.h $(CC) -o $ -c $ -I ./include./obj/music.o:./musi
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 帶貨博主合同模板
- 工程配電箱買賣合同范例
- 印刷付款方式合同范例
- 小區(qū)供水改造合同范例
- 住宅銷售合同范例
- 個人黨性鍛煉總結(jié)
- 做生意欠款合同范例
- 國際快件業(yè)務(wù)合作合同模板
- 《體化監(jiān)護方案》課件
- 中介招聘項目合同模板
- 人教版(PEP)小學六年級英語上冊全冊教案
- 2024年木屑購銷合同范本
- 第二章 旅游線路類型及設(shè)計原則
- 大學美育學習通超星期末考試答案章節(jié)答案2024年
- 項目工作計劃表模板(共6篇)
- 臨時食堂施工方案
- 2024年人教版七年級上冊地理期中測試試卷及答案
- 2023-2024全國初中物理競賽試題:光的反射及折射(含答案)
- 2024年英語專業(yè)八級漢譯英試題真題
- 2024年中考英語試題分類匯編:短文填空之選詞填空(解析版)
- 山東省煙臺市2024年中考英語真題【附真題答案】
評論
0/150
提交評論