linux編程基礎(chǔ)[沐風(fēng)書(shū)苑]_第1頁(yè)
linux編程基礎(chǔ)[沐風(fēng)書(shū)苑]_第2頁(yè)
linux編程基礎(chǔ)[沐風(fēng)書(shū)苑]_第3頁(yè)
linux編程基礎(chǔ)[沐風(fēng)書(shū)苑]_第4頁(yè)
linux編程基礎(chǔ)[沐風(fēng)書(shū)苑]_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、LINUX 開(kāi)發(fā)基礎(chǔ) 湖北職院信息技術(shù)學(xué)院 1參考幻燈 LINUX 開(kāi)發(fā)基礎(chǔ)介紹開(kāi)發(fā)基礎(chǔ)介紹 nLinux 的編程概述的編程概述 nLinuxLinux下下VIMVIM的使用的使用 n編譯器編譯器GCCGCC的使用的使用 n調(diào)試器調(diào)試器gdb的使用的使用 n項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 2參考幻燈 Linux 編程環(huán)境概述編程環(huán)境概述 lLinux 是使用 C 語(yǔ)言開(kāi)發(fā)的,所以基于Linux 平臺(tái)的程序開(kāi)發(fā),C語(yǔ)言是首選的開(kāi)發(fā)語(yǔ)言。 GCC是linux系統(tǒng)上的標(biāo)準(zhǔn)編譯器,C/C+語(yǔ)言也是Linux上程序設(shè)計(jì)的基本語(yǔ)言. l編輯器、編譯鏈接器、調(diào)試器及項(xiàng)目管理工具。 l編

2、輯器 Linux 中最常用的編輯器有 Vi(Vim)和 Emacs l編譯鏈接器 在Linux中,最常用的編譯器是Gcc編譯器。它是GNU推出的功能強(qiáng)大、性能優(yōu)越的 多平臺(tái)編譯器. l調(diào)試器 Gdb 是絕大多數(shù) Linux 開(kāi)發(fā)人員所使用的調(diào)試器,它可以方便地設(shè)置斷點(diǎn)、單步跟 蹤等 l項(xiàng)目管理器 lLinux 中的項(xiàng)目管理器“make” 是一種控制編譯或者重復(fù)編譯軟件的工具。 l它還能自動(dòng)管理軟件編譯的內(nèi)容、方式和時(shí)機(jī),使程序員能夠把精力集中在代碼 的編寫(xiě)上而不是在源代碼的組織上。 3參考幻燈 Linux 的編程概述的編程概述 l庫(kù)和頭文件的保存位置庫(kù)和頭文件的保存位置 l函數(shù)庫(kù)函數(shù)庫(kù) l/l

3、ib:系統(tǒng)必備共享庫(kù):系統(tǒng)必備共享庫(kù) l/usr/lib:標(biāo)準(zhǔn)共享庫(kù)和靜態(tài)庫(kù):標(biāo)準(zhǔn)共享庫(kù)和靜態(tài)庫(kù) l/usr/X11R6/lib:X11R6 的函數(shù)庫(kù)的函數(shù)庫(kù) l/usr/local/lib:本地函數(shù)庫(kù):本地函數(shù)庫(kù) l頭文件頭文件 l/usr/include:用戶空間頭文件:用戶空間頭文件 l/usr/local/include:本地頭文件:本地頭文件 4參考幻燈 二、二、LinuxLinux下下VIMVIM的使用的使用 lVIVI是是LinuxLinux最常用的編輯器,最常用的編輯器,LinuxLinux里提供的是里提供的是VIVI的加強(qiáng)版的加強(qiáng)版VIMVIM, 但同但同VIVI是完全兼容。

4、是完全兼容。 lVi 3Vi 3種基本工作模式:種基本工作模式:命令模式、插入模式、末行模式命令模式、插入模式、末行模式。 5參考幻燈 二、二、LinuxLinux下下VIMVIM的使用的使用 lVI 3VI 3種基本工作模式:種基本工作模式: l命令模式下,鍵入的每個(gè)字符都被當(dāng)作一個(gè)命令命令模式下,鍵入的每個(gè)字符都被當(dāng)作一個(gè)命令 處理。剛啟動(dòng)時(shí),處于命令模式。在插入模式下處理。剛啟動(dòng)時(shí),處于命令模式。在插入模式下 按按“ESCESC”,也可以回到指令模式。,也可以回到指令模式。 l插入模式。在命令模式下按插入模式。在命令模式下按“a a”、“i i”、“o o”進(jìn)進(jìn) 入插入模式。入插入模式。

5、 l末行命令模式也是一種常用模式,用于輸入命令末行命令模式也是一種常用模式,用于輸入命令 進(jìn)行文字編輯的輔助功能。通過(guò)冒號(hào)進(jìn)行文字編輯的輔助功能。通過(guò)冒號(hào)“:”進(jìn)入進(jìn)入 末行模式。例如末行模式。例如“:q:q” 6參考幻燈 二、二、LinuxLinux下下VIMVIM的使用的使用 lVIMVIM進(jìn)入:進(jìn)入: 在系統(tǒng)提示符在系統(tǒng)提示符“$ $”下鍵入命令下鍵入命令vimvim,后面跟上想要編輯(或者建立)的,后面跟上想要編輯(或者建立)的 文件名,文件名,VIM VIM 可以自動(dòng)載入所要編輯的文件或是開(kāi)啟一個(gè)新文件??梢宰詣?dòng)載入所要編輯的文件或是開(kāi)啟一個(gè)新文件。 lVIMVIM的退出:的退出:

6、可以在命令行方式下使用命令可以在命令行方式下使用命令“:wq:wq”或者或者“:q:q!”,前者的功能是寫(xiě),前者的功能是寫(xiě) 文件并從文件并從VIMVIM中退出,后者的功能是從中退出,后者的功能是從VIMVIM中退出,但不保存所作的修中退出,但不保存所作的修 改(注意冒號(hào))。改(注意冒號(hào))。 lVimVim中的語(yǔ)法加亮:中的語(yǔ)法加亮: :syntax enable ,也可以在配置文件中激活該功能。,也可以在配置文件中激活該功能。 7參考幻燈 LinuxLinux下下VIMVIM的使用的使用 lVimrc配置文件配置文件 lVim在啟動(dòng)時(shí)會(huì)讀取該文件。該文件可以放在用戶目錄下在啟動(dòng)時(shí)會(huì)讀取該文件。

7、該文件可以放在用戶目錄下/.vimrc, /etc/vim/vimrc l編寫(xiě)語(yǔ)法可參考編寫(xiě)語(yǔ)法可參考vi的用戶手冊(cè)的的用戶手冊(cè)的41章。章。 lVim的使用教程:推薦使用的使用教程:推薦使用vimtutor,學(xué)習(xí)學(xué)習(xí)vim的最好方式就是練習(xí),的最好方式就是練習(xí), 而而vimturor是非常好的教學(xué)平臺(tái)。是非常好的教學(xué)平臺(tái)。 lVimtutor 使用系統(tǒng)默認(rèn)語(yǔ)言使用系統(tǒng)默認(rèn)語(yǔ)言 lVimtutor en 英文教程英文教程 l練習(xí)練習(xí)vim的使用的使用 8參考幻燈 vi的常用命令的常用命令 命令說(shuō)明功能鍵 h向左移一個(gè)字符 I向右移一個(gè)字符 J向上移一個(gè)字符 k向下移一個(gè)字符 0移至該行之首 H

8、ome $移至該行之末 End 9參考幻燈 H 移至窗口的第一行 M 移至窗口的中間那行 L 移至窗口的最后一行 G 移至該文件的最后一行 nG 移至該文件的第 n 行 Ctrl+f 向后翻一頁(yè) PageDown Ctrl+b 向前翻一頁(yè) PageUp 移至該行的第一個(gè)非空白字 符處 10參考幻燈 命令 說(shuō)明 功能鍵 x 刪除光標(biāo)后的字符 Delete X 刪除光標(biāo)前的字符 dd 刪除光標(biāo)所在的行 ndd 刪除包括光標(biāo)所在行 的n行文本 r 修改光標(biāo)所在字符 11參考幻燈 R 進(jìn)入替換狀態(tài),直到按Esc回 到命令模式為止 Insert s 刪除光標(biāo)所在字符,并進(jìn)入輸 入模式 S 刪除光標(biāo)所在的

9、行,并進(jìn)入輸 入模式 u 恢復(fù)剛才被修改的文本 U 恢復(fù)光標(biāo)所在行的所有修改 . 重復(fù)上一次命令的操作 12參考幻燈 命令 說(shuō)明 Y 復(fù)制當(dāng)前行至編輯緩沖區(qū) nY 復(fù)制當(dāng)前行開(kāi)始的n行至編輯緩沖區(qū) p 將編輯緩沖區(qū)的內(nèi)容粘貼到光標(biāo)后的一行 P 將編輯緩沖區(qū)的內(nèi)容粘貼到光標(biāo)前的一行 a 從光標(biāo)所在位置后面開(kāi)始新增文本 13參考幻燈 命令 命令說(shuō)明 A 從光標(biāo)所在行最后面的地方開(kāi)始新增文本 i 從光標(biāo)所在位置前面開(kāi)始插入文本 I 從光標(biāo)所在列的第一個(gè)非空白字元前面開(kāi)始插 入文本 o 在光標(biāo)所在列下新增一行并進(jìn)入輸入模式 O 在光標(biāo)所在列上方新增一行并進(jìn)入輸入模式 14參考幻燈 命令 說(shuō)明 :q 結(jié)

10、束編輯 :q! 強(qiáng)制離開(kāi)vi,放棄存盤(pán) :w 存盤(pán) :w filename 將編輯內(nèi)容保存為名為filename的文件 :wq 存盤(pán)并退出 15參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGNU C lANSI C (標(biāo)準(zhǔn) C ) lGNU C 支持GNU 擴(kuò)展的C 語(yǔ)言。GNU CC對(duì)C 語(yǔ)言提供了很多擴(kuò)展,這些擴(kuò)展對(duì)優(yōu)化、目標(biāo)代碼 布局、更安全的檢查等方面提供了很強(qiáng)的支持。 lLinux 內(nèi)核代碼使用了大量的 GNU C 擴(kuò)展,以至于 能夠編譯 Linux 內(nèi)核的唯一編譯器是 GNU CC。 16參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGCC(GNU Compiler Co

11、llection) lGNU CC(簡(jiǎn)稱為 Gcc)是 GNU 項(xiàng)目中符合 ANSI C 標(biāo)準(zhǔn)的編譯系統(tǒng),能夠編譯用 C、C+和 Object C 等語(yǔ)言編寫(xiě)的程序。 l Gcc 又是一個(gè)交叉平臺(tái)編譯器 在當(dāng)前CPU平臺(tái) 上為多種不同體系結(jié)構(gòu)的硬件平臺(tái)開(kāi)發(fā)軟件。適 合在嵌入式領(lǐng)域的開(kāi)發(fā)編譯。 17參考幻燈 GCCGCC編譯器的使用編譯器的使用 lgcc則通過(guò)后綴來(lái)區(qū)別輸入文件的類(lèi)別。 gcc所遵 循的部分后綴約定規(guī)則: l.c : C語(yǔ)言源代碼文件; l.a : 是由目標(biāo)文件構(gòu)成的檔案庫(kù)文件; l.C,.cc或.cxx : 是C+源代碼文件; l.h : 是程序所包含的頭文件; l.i : 是

12、已經(jīng)預(yù)處理過(guò)的C源代碼文件; l.ii : 是已經(jīng)預(yù)處理過(guò)的C+源代碼文件; l.o : 是編譯后的目標(biāo)文件; l.s : 是匯編語(yǔ)言源代碼文件; l.S : 是經(jīng)過(guò)預(yù)編譯的匯編語(yǔ)言源代碼文件。 18參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGCC l通常gcc后跟一些選項(xiàng)和文件名來(lái)使用 GCC 編譯器 gcc options filenames 其中options就是編譯器所需要的參數(shù),filenames給 出相關(guān)的文件名稱 l例如:gcc o hello hello.c 19參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGcc的編譯流程分4個(gè)步驟: l預(yù)處理(Pre-Proce

13、ssing) l編譯(Compiling) l匯編(Assembling) l鏈接(Linking) l每個(gè)階段分別調(diào)用不同的工具進(jìn)行處理。 預(yù)處理 鏈接編譯匯編 源 程 序 (*.c) 可執(zhí)行文件 預(yù)處理器編譯器匯編器連接器 20參考幻燈 GCCGCC編譯器的使用編譯器的使用 預(yù)處理 鏈接編譯匯編 源程序 (*.c) 可執(zhí)行文件 預(yù)處理器編譯器匯編器連接器 nGCC首先調(diào)用預(yù)處理程序cpp進(jìn)行預(yù)處理,展開(kāi)程序代碼中 的宏,并在其中插入頭文件所包含的內(nèi)容; n把預(yù)處理后的源代碼編譯產(chǎn)生匯編代碼; n調(diào)用as匯編器處理這些匯編代碼產(chǎn)生目標(biāo)代碼; n通過(guò)ld連接器創(chuàng)建二進(jìn)制可執(zhí)行文件或者建立庫(kù)文件

14、。 21參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGcc的編譯流程 l預(yù)處理階段: gcc E hello.c o hello.i l編譯階段:gcc S hello.i o hello.s l匯編階段:gcc c hello.s o hello.o l鏈接階段:gcc hello.o o hello l執(zhí)行:./hello 22參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGCC的選項(xiàng) lGCC 有超過(guò)100個(gè)的編譯選項(xiàng)可用. 主要包括編譯處理選項(xiàng)、警告 選項(xiàng)、出錯(cuò)選項(xiàng)、優(yōu)化選項(xiàng)、體系結(jié)構(gòu)選項(xiàng)。 l -c,只編譯,不連接成為可執(zhí)行文件,編譯器只是由輸入的.c等 源代碼文件生成.o

15、為后綴的目標(biāo)文件,通常用于編譯不包含主程 序的子程序文件。 l-o output_filename,確定輸出文件的名稱為output_filename, 同時(shí)這個(gè)名稱不能和源文件同名。如果不給出這個(gè)選項(xiàng),gcc就給 出預(yù)設(shè)的可執(zhí)行文件a.out。 l-S 編譯選項(xiàng)告訴 GCC 在為 C 代碼產(chǎn)生了匯編語(yǔ)言文件后停止編 譯. GCC 產(chǎn)生的匯編語(yǔ)言文件的缺省擴(kuò)展名是 .s . 23參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGCC 選項(xiàng) l-g,產(chǎn)生符號(hào)調(diào)試工具(GNU的gdb)所必要的符號(hào) 信息,要想對(duì)源代碼進(jìn)行調(diào)試,我們就必須加入 這個(gè)選項(xiàng)。 l-O,對(duì)程序進(jìn)行優(yōu)化編譯、連接,產(chǎn)生的可

16、執(zhí)行 文件的執(zhí)行效率可以提高,但是,編譯、連接的 速度就相應(yīng)地要慢一些。 l-O2,比-O更好的優(yōu)化編譯、連接,當(dāng)然整個(gè)編 譯、連接過(guò)程會(huì)更慢。 24參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGCC 選項(xiàng) l-Idirname,在頭文件的搜索路徑列表中添加dirname目錄。這個(gè)選 項(xiàng)的作用是:到指定的dirname目錄中去尋找需要的頭文件。 l-Ldirname,在庫(kù)文件的搜索路徑列表中添加dirname目錄。在預(yù)設(shè) 狀態(tài)下,連接程序ld在系統(tǒng)的預(yù)設(shè)路徑中(如/usr/lib)尋找所需要 的檔案庫(kù)文件,這個(gè)選項(xiàng) 告訴連接程序,首先到-L指定的目錄中 去尋找,然后到系統(tǒng)預(yù)設(shè)路徑中尋找。

17、 l-lname,在連接時(shí),裝載名字為“l(fā)ibname.a”的函數(shù)庫(kù),該函數(shù)庫(kù) 位于系統(tǒng)預(yù)設(shè)的目錄或者由-L選項(xiàng)確定的目錄下。例如,-lm表示 連接名為“l(fā)ibm.a”的數(shù)學(xué)函數(shù)庫(kù)。 25參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGCC 選項(xiàng) l更為詳盡的資料可以參看Linux系統(tǒng)的聯(lián)機(jī)幫助。 (man) l很多的 GCC 選項(xiàng)包括一個(gè)以上的字符. 因此你必須 為每個(gè)選項(xiàng)指定各自的連字符, 并且就象大多數(shù) Linux 命令一樣你不能在一個(gè)單獨(dú)的連字符后跟一 組選項(xiàng). l gcc g O2 o hello hello.c lgcc包含的c/c+編譯器 l一般c程序就用gcc編譯,c+程序

18、就用g+編譯 26參考幻燈 GCCGCC編譯器的使用編譯器的使用 l練習(xí)使用gcc編譯C源文件 l通過(guò)Hello world程序,熟悉gcc及其選項(xiàng)的使用。 lHello World hello.C int main (void) printf(“hello world!n”); return 0; 編譯編譯 $ gcc -o hello hello.c 27參考幻燈 GCCGCC編譯器的使用編譯器的使用 l多個(gè)多個(gè)c文件文件 兩個(gè)源文件兩個(gè)源文件 main.c 和和 factorial.c 兩個(gè)源文件,現(xiàn)在要編譯生成兩個(gè)源文件,現(xiàn)在要編譯生成 一個(gè)計(jì)算階乘的程序。一個(gè)計(jì)算階乘的程序。 fac

19、torial.c int factorial (int n) if (n = 1) return 1; else return factorial (n - 1) * n; 28參考幻燈 GCCGCC編譯器的使用編譯器的使用 l多個(gè)多個(gè)c文件文件 factorial.c main.c #include #include int factorial (int n); int main (int argc, char *argv) int n; if (argc 2) printf (Usage: %s nn, argv 0); return -1; else n = atoi (argv1);

20、printf (Factorial of %d is %d.n, n, factorial (n); return 0; 29參考幻燈 GCCGCC編譯器的使用編譯器的使用 l多個(gè)多個(gè)c文件文件 編譯:編譯: $ gcc -o factorial main.c factorial.c 練習(xí)編譯多個(gè)練習(xí)編譯多個(gè)c文件文件 30參考幻燈 Gdb 調(diào)試器調(diào)試器 lGdb 使用流程 lGdb 調(diào)試器是一款GNU 開(kāi)發(fā)組織并發(fā)布的 UNIX/Linux 下的程序調(diào)試工具。 lGdb讓您能夠看到一個(gè)程序的內(nèi)部結(jié)構(gòu),指出變量 的值,設(shè)置斷點(diǎn)并在源碼中進(jìn)行單步執(zhí)行。 31參考幻燈 Gdb 調(diào)試器調(diào)試器 lGd

21、b 使用流程 l要使用gdb進(jìn)行調(diào)試,一定要在編譯時(shí)加上調(diào)試選項(xiàng) “-g”。 lgcc -g test.c -o test lgdb test l使用“help”命令查看幫助信息。 32參考幻燈 Gdb 調(diào)試器調(diào)試器 lGdb的簡(jiǎn)單使用 l查看文件 l l設(shè)置斷點(diǎn) b 行號(hào) l查看斷點(diǎn)情況 info b l開(kāi)始運(yùn)行代碼 r run l臨時(shí)查看變量值 p變量 l長(zhǎng)期監(jiān)視變量值 disp 變量 或 watch 變量 l單步運(yùn)行 “n” (next)或“s” step) l若有函數(shù)調(diào)用的時(shí)候, “s”會(huì)進(jìn)入該函數(shù)而“n”不會(huì)進(jìn)入該函數(shù)。 l恢復(fù)程序運(yùn)行 “c” (continue),在斷點(diǎn)處停止。

22、33參考幻燈 Gdb 調(diào)試器調(diào)試器 lGdb 基本命令 l通過(guò)查看 help 查找命令。 lGdb 的 help 將其分成了很多種類(lèi)(class)。 l help l Help “種類(lèi)” 查看該種類(lèi)中的命令列表 l Help 命令 l已知命令名:Help 命令 34參考幻燈 Gdb 調(diào)試器調(diào)試器 lGdb 基本命令 l工作環(huán)境相關(guān)命令 l對(duì)程序相關(guān)的工作環(huán)境進(jìn)行相應(yīng)的設(shè)定 l使用shell中的命令進(jìn)行相關(guān)的操作 35參考幻燈 Gdb 調(diào)試器調(diào)試器 lGdb 基本命令 l設(shè)置斷點(diǎn)與恢復(fù)命令 36參考幻燈 Gdb 調(diào)試器調(diào)試器 lGdb 基本命令 l設(shè)置斷點(diǎn)有多種方式: l函數(shù)斷點(diǎn): “b 函數(shù)”

23、 此時(shí)的斷點(diǎn)實(shí)際是在函數(shù)的定義處 l條件斷點(diǎn):b 行數(shù)或函數(shù)名 if 表達(dá)式 b 8 if i=10 37參考幻燈 Gdb 調(diào)試器調(diào)試器 lGdb 基本命令 lGdb 中源碼查看相關(guān)命令 38參考幻燈 Gdb 調(diào)試器調(diào)試器 lGdb 基本命令 lGdb 中查看運(yùn)行數(shù)據(jù)相關(guān)命令 39參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 lMake介紹 lMake是一種控制編譯或者重復(fù)編譯軟件的非常重要的工具。 Make 可自動(dòng)決定一個(gè)大程序中哪些文件需要重新編譯,并執(zhí) 行重新編譯它們的命令。 l要使用make,必須編寫(xiě)一個(gè)叫做Makefile的文件。Makefile文 件是定義make

24、如何執(zhí)行的規(guī)則文件,它包含一些規(guī)則告訴make 工具編譯哪些文件、怎么編譯以及在什么條件下去編譯。 lMakefile寫(xiě)好之后,每次改變了某些源文件,只要執(zhí)行make命 令,所有必要的重新編譯將執(zhí)行。 lMake程序通過(guò)比較目標(biāo)文件的生成時(shí)間和其所依賴的源文件的 最后修改時(shí)間和來(lái)決定是否執(zhí)行makefile中定義的命令來(lái)更新 該目標(biāo)文件。 40參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 l例子: hello:hello.o gcc hello.o o hello hello.o: hello.c gcc c hello.c o hello.o 則輸入:make 即可生成可執(zhí)

25、行程序hello 41參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 lMakefile文件的基本結(jié)構(gòu) lMakefile包含一些規(guī)則來(lái)告訴make處理哪些文件以及如何處理這 些文件。 l這些規(guī)則主要是描述哪些文件(稱為target目標(biāo)文件,不要和編 譯時(shí)產(chǎn)生的目標(biāo)文件相混淆)是從哪些別的文件(稱為 dependency依賴文件)中產(chǎn)生的,以及用什么命令(command)來(lái) 執(zhí)行這個(gè)過(guò)程。每條規(guī)則包含以下內(nèi)容: l一個(gè)“目標(biāo)體”。即可是可執(zhí)行文件和目標(biāo)文件,目標(biāo)也可以 是要執(zhí)行的動(dòng)作。 l一個(gè)或多個(gè)依賴文件(dependency)列表。 l一系列命今(command),是mak

26、e執(zhí)行的動(dòng)作,通常是把指定的 相關(guān)文件編譯成目標(biāo)文件的編譯命令,每個(gè)命令占一行,且每 個(gè)命令行的起始字符必須為T(mén)AB字符。 42參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 lMakefile文件的基本結(jié)構(gòu) lMakefile規(guī)則的一般形式如下: target:dependency dependency (tab) ltarget也就是一個(gè)目標(biāo)文件,可以是Object File,也可以是執(zhí)行 文件。還可以是一個(gè)標(biāo)簽(Label)。 ldependency要生成target所需要的文件或是目標(biāo)。 lcommand也就是make需要執(zhí)行的命令。可以是任意的Shell命 令。 調(diào)用

27、make命令可輸入:# make target target是Makefile文件中定義的目標(biāo)之一,如果省略target, make就將生成Makefile文件中定義的第一個(gè)目標(biāo)。 43參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 lmake處理makefile文件的過(guò)程 l首先make按順序讀取makefile中的規(guī)則,然后檢查該規(guī)則中的依 賴文件與目標(biāo)文件的時(shí)間戳哪個(gè)比較新。 l如果目標(biāo)文件的時(shí)問(wèn)戳比依賴文件還早,就按規(guī)則中定義的 命令更新目標(biāo)文件。 l如果該規(guī)則中的依賴文件又是其他規(guī)則中的目標(biāo)文件,那么 依照規(guī)則鏈不斷執(zhí)行這個(gè)過(guò)程,直到Makefile文件的結(jié)束, 至少

28、可以找到一個(gè)不是規(guī)則生成的最終依賴文件,獲得此文 件的時(shí)間戳,然后從下到上依照規(guī)則鏈執(zhí)行目標(biāo)文件的時(shí)間 戳比此文件時(shí)間戳舊的規(guī)則,直到最頂層的規(guī)則。 l通過(guò)以上的分析過(guò)程,可以看到make的優(yōu)點(diǎn),因?yàn)?o目標(biāo)文件 依賴.c源文件,源碼文件里一個(gè)簡(jiǎn)單改變都會(huì)造成那個(gè)文件被 重新編譯,并根據(jù)規(guī)則鏈依次由下到上執(zhí)行編譯過(guò)程,直到最 終的可執(zhí)行文件被重新連接。 44參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 l例子: l設(shè)一項(xiàng)目中包函頭源文件prog.c、sub.c和一頭文件sub.h,并在源文件 prog.c、sub.c中都包含了頭文件sub.h l則Makefile可寫(xiě)為: l

29、test:prog.o sub.o gcc -o test prog.o sub.o lprog.o:prog.c sub.h gcc -c prog.c o prog.o lsub.o:sub.c sub.h gcc c sub.c -o sub.o lclean: rm -f *.o test 運(yùn)行 make命令即生成test 運(yùn)行 make clean清除生成的文件 45參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 lMakefile中的變量中的變量 lMakefile里的變量對(duì)大小寫(xiě)敏感,一般使用大寫(xiě)宇母。變量的主要作 用如下: l保存文件名列表。 l保存可執(zhí)行命令名

30、,如編譯器。 l保存編譯器的參數(shù)。在很多源代碼編譯時(shí),gcc需要很長(zhǎng)的參數(shù) 選項(xiàng),在很多情況下,所有的編譯命令使用一組相同的選項(xiàng),如 果把這組選項(xiàng)使用一個(gè)變量代表,那么可以把這個(gè)變量放在所有 引用編譯器的地方。當(dāng)要改變選項(xiàng)的時(shí)候,只需改變一次這個(gè)變 量的內(nèi)容即可。 46參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 lMakefile中的變量中的變量 lMakefile中的變量是用一個(gè)文本串在Makefile中定義的,這個(gè)文 本串就是變量的值。只要在一行的開(kāi)始寫(xiě)下這個(gè)變量的名字, 后面跟一個(gè)“”號(hào),以及要設(shè)定這個(gè)變量的值即可定義變量, 定義變量的語(yǔ)法: VARNAME=stri

31、ng l使用時(shí),把變量用括號(hào)括起來(lái),并在前面加上$符號(hào),就可以 引用變量的值: $VARNAME、$(VARNAME) lmake解釋規(guī)則時(shí),VARNAME在等式右端展開(kāi)為定義它的字符 串。變量一般都在Makefile的頭部定義。 47參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 利用變量把前面的Makefile重寫(xiě)一遍: OBJS=prog.o sub.o CC=gcc test:$ OBJS $ CC o test $ OBJS prog.o:prog.c sub.h $ CC c prog.c o prog.o sub.o:sub.c sub.h $ CC c sub.c o sub

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論