![linux編程基礎(chǔ)[沐風(fēng)書苑]_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/1/00597997-5ba7-49c6-a05c-6468179331ae/00597997-5ba7-49c6-a05c-6468179331ae1.gif)
![linux編程基礎(chǔ)[沐風(fēng)書苑]_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/1/00597997-5ba7-49c6-a05c-6468179331ae/00597997-5ba7-49c6-a05c-6468179331ae2.gif)
![linux編程基礎(chǔ)[沐風(fēng)書苑]_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/1/00597997-5ba7-49c6-a05c-6468179331ae/00597997-5ba7-49c6-a05c-6468179331ae3.gif)
![linux編程基礎(chǔ)[沐風(fēng)書苑]_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/1/00597997-5ba7-49c6-a05c-6468179331ae/00597997-5ba7-49c6-a05c-6468179331ae4.gif)
![linux編程基礎(chǔ)[沐風(fēng)書苑]_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/1/00597997-5ba7-49c6-a05c-6468179331ae/00597997-5ba7-49c6-a05c-6468179331ae5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、LINUX 開發(fā)基礎(chǔ) 湖北職院信息技術(shù)學(xué)院 1參考幻燈 LINUX 開發(fā)基礎(chǔ)介紹開發(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 語言開發(fā)的,所以基于Linux 平臺(tái)的程序開發(fā),C語言是首選的開發(fā)語言。 GCC是linux系統(tǒng)上的標(biāo)準(zhǔn)編譯器,C/C+語言也是Linux上程序設(shè)計(jì)的基本語言. 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 開發(fā)人員所使用的調(diào)試器,它可以方便地設(shè)置斷點(diǎn)、單步跟 蹤等 l項(xiàng)目管理器 lLinux 中的項(xiàng)目管理器“make” 是一種控制編譯或者重復(fù)編譯軟件的工具。 l它還能自動(dòng)管理軟件編譯的內(nèi)容、方式和時(shí)機(jī),使程序員能夠把精力集中在代碼 的編寫上而不是在源代碼的組織上。 3參考幻燈 Linux 的編程概述的編程概述 l庫和頭文件的保存位置庫和頭文件的保存位置 l函數(shù)庫函數(shù)庫 l/l
3、ib:系統(tǒng)必備共享庫:系統(tǒng)必備共享庫 l/usr/lib:標(biāo)準(zhǔn)共享庫和靜態(tài)庫:標(biāo)準(zhǔn)共享庫和靜態(tài)庫 l/usr/X11R6/lib:X11R6 的函數(shù)庫的函數(shù)庫 l/usr/local/lib:本地函數(shù)庫:本地函數(shù)庫 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)行文字編輯的輔助功能。通過冒號(hào)進(jìn)行文字編輯的輔助功能。通過冒號(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)載入所要編輯的文件或是開啟一個(gè)新文件??梢宰詣?dòng)載入所要編輯的文件或是開啟一個(gè)新文件。 lVIMVIM的退出:的退出:
6、可以在命令行方式下使用命令可以在命令行方式下使用命令“:wq:wq”或者或者“:q:q!”,前者的功能是寫,前者的功能是寫 文件并從文件并從VIMVIM中退出,后者的功能是從中退出,后者的功能是從VIMVIM中退出,但不保存所作的修中退出,但不保存所作的修 改(注意冒號(hào))。改(注意冒號(hào))。 lVimVim中的語法加亮:中的語法加亮: :syntax enable ,也可以在配置文件中激活該功能。,也可以在配置文件中激活該功能。 7參考幻燈 LinuxLinux下下VIMVIM的使用的使用 lVimrc配置文件配置文件 lVim在啟動(dòng)時(shí)會(huì)讀取該文件。該文件可以放在用戶目錄下在啟動(dòng)時(shí)會(huì)讀取該文件。
7、該文件可以放在用戶目錄下/.vimrc, /etc/vim/vimrc l編寫語法可參考編寫語法可參考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)語言使用系統(tǒng)默認(rèn)語言 lVimtutor en 英文教程英文教程 l練習(xí)練習(xí)vim的使用的使用 8參考幻燈 vi的常用命令的常用命令 命令說明功能鍵 h向左移一個(gè)字符 I向右移一個(gè)字符 J向上移一個(gè)字符 k向下移一個(gè)字符 0移至該行之首 H
8、ome $移至該行之末 End 9參考幻燈 H 移至窗口的第一行 M 移至窗口的中間那行 L 移至窗口的最后一行 G 移至該文件的最后一行 nG 移至該文件的第 n 行 Ctrl+f 向后翻一頁 PageDown Ctrl+b 向前翻一頁 PageUp 移至該行的第一個(gè)非空白字 符處 10參考幻燈 命令 說明 功能鍵 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參考幻燈 命令 說明 Y 復(fù)制當(dāng)前行至編輯緩沖區(qū) nY 復(fù)制當(dāng)前行開始的n行至編輯緩沖區(qū) p 將編輯緩沖區(qū)的內(nèi)容粘貼到光標(biāo)后的一行 P 將編輯緩沖區(qū)的內(nèi)容粘貼到光標(biāo)前的一行 a 從光標(biāo)所在位置后面開始新增文本 13參考幻燈 命令 命令說明 A 從光標(biāo)所在行最后面的地方開始新增文本 i 從光標(biāo)所在位置前面開始插入文本 I 從光標(biāo)所在列的第一個(gè)非空白字元前面開始插 入文本 o 在光標(biāo)所在列下新增一行并進(jìn)入輸入模式 O 在光標(biāo)所在列上方新增一行并進(jìn)入輸入模式 14參考幻燈 命令 說明 :q 結(jié)
10、束編輯 :q! 強(qiáng)制離開vi,放棄存盤 :w 存盤 :w filename 將編輯內(nèi)容保存為名為filename的文件 :wq 存盤并退出 15參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGNU C lANSI C (標(biāo)準(zhǔn) C ) lGNU C 支持GNU 擴(kuò)展的C 語言。GNU CC對(duì)C 語言提供了很多擴(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(簡稱為 Gcc)是 GNU 項(xiàng)目中符合 ANSI C 標(biāo)準(zhǔn)的編譯系統(tǒng),能夠編譯用 C、C+和 Object C 等語言編寫的程序。 l Gcc 又是一個(gè)交叉平臺(tái)編譯器 在當(dāng)前CPU平臺(tái) 上為多種不同體系結(jié)構(gòu)的硬件平臺(tái)開發(fā)軟件。適 合在嵌入式領(lǐng)域的開發(fā)編譯。 17參考幻燈 GCCGCC編譯器的使用編譯器的使用 lgcc則通過后綴來區(qū)別輸入文件的類別。 gcc所遵 循的部分后綴約定規(guī)則: l.c : C語言源代碼文件; l.a : 是由目標(biāo)文件構(gòu)成的檔案庫文件; l.C,.cc或.cxx : 是C+源代碼文件; l.h : 是程序所包含的頭文件; l.i : 是
12、已經(jīng)預(yù)處理過的C源代碼文件; l.ii : 是已經(jīng)預(yù)處理過的C+源代碼文件; l.o : 是編譯后的目標(biāo)文件; l.s : 是匯編語言源代碼文件; l.S : 是經(jīng)過預(yù)編譯的匯編語言源代碼文件。 18參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGCC l通常gcc后跟一些選項(xiàng)和文件名來使用 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ù)處理,展開程序代碼中 的宏,并在其中插入頭文件所包含的內(nèi)容; n把預(yù)處理后的源代碼編譯產(chǎn)生匯編代碼; n調(diào)用as匯編器處理這些匯編代碼產(chǎn)生目標(biāo)代碼; n通過ld連接器創(chuàng)建二進(jìn)制可執(zhí)行文件或者建立庫文件
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 有超過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)生了匯編語言文件后停止編 譯. GCC 產(chǎn)生的匯編語言文件的缺省擴(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è)編 譯、連接過程會(huì)更慢。 24參考幻燈 GCCGCC編譯器的使用編譯器的使用 lGCC 選項(xiàng) l-Idirname,在頭文件的搜索路徑列表中添加dirname目錄。這個(gè)選 項(xiàng)的作用是:到指定的dirname目錄中去尋找需要的頭文件。 l-Ldirname,在庫文件的搜索路徑列表中添加dirname目錄。在預(yù)設(shè) 狀態(tài)下,連接程序ld在系統(tǒng)的預(yù)設(shè)路徑中(如/usr/lib)尋找所需要 的檔案庫文件,這個(gè)選項(xiàng) 告訴連接程序,首先到-L指定的目錄中 去尋找,然后到系統(tǒng)預(yù)設(shè)路徑中尋找。
17、 l-lname,在連接時(shí),裝載名字為“l(fā)ibname.a”的函數(shù)庫,該函數(shù)庫 位于系統(tǒng)預(yù)設(shè)的目錄或者由-L選項(xiàng)確定的目錄下。例如,-lm表示 連接名為“l(fā)ibm.a”的數(shù)學(xué)函數(shù)庫。 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通過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 開發(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的簡單使用 l查看文件 l l設(shè)置斷點(diǎn) b 行號(hào) l查看斷點(diǎn)情況 info b l開始運(yùn)行代碼 r run l臨時(shí)查看變量值 p變量 l長期監(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通過查看 help 查找命令。 lGdb 的 help 將其分成了很多種類(class)。 l help l Help “種類” 查看該種類中的命令列表 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,必須編寫一個(gè)叫做Makefile的文件。Makefile文 件是定義make
24、如何執(zhí)行的規(guī)則文件,它包含一些規(guī)則告訴make 工具編譯哪些文件、怎么編譯以及在什么條件下去編譯。 lMakefile寫好之后,每次改變了某些源文件,只要執(zhí)行make命 令,所有必要的重新編譯將執(zhí)行。 lMake程序通過比較目標(biāo)文件的生成時(shí)間和其所依賴的源文件的 最后修改時(shí)間和來決定是否執(zhí)行makefile中定義的命令來更新 該目標(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ī)則來告訴make處理哪些文件以及如何處理這 些文件。 l這些規(guī)則主要是描述哪些文件(稱為target目標(biāo)文件,不要和編 譯時(shí)產(chǎn)生的目標(biāo)文件相混淆)是從哪些別的文件(稱為 dependency依賴文件)中產(chǎn)生的,以及用什么命令(command)來 執(zhí)行這個(gè)過程。每條規(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è)命令行的起始字符必須為TAB字符。 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í)行的命令??梢允侨我獾腟hell命 令。 調(diào)用
27、make命令可輸入:# make target target是Makefile文件中定義的目標(biāo)之一,如果省略target, make就將生成Makefile文件中定義的第一個(gè)目標(biāo)。 43參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 lmake處理makefile文件的過程 l首先make按順序讀取makefile中的規(guī)則,然后檢查該規(guī)則中的依 賴文件與目標(biāo)文件的時(shí)間戳哪個(gè)比較新。 l如果目標(biāo)文件的時(shí)問戳比依賴文件還早,就按規(guī)則中定義的 命令更新目標(biāo)文件。 l如果該規(guī)則中的依賴文件又是其他規(guī)則中的目標(biāo)文件,那么 依照規(guī)則鏈不斷執(zhí)行這個(gè)過程,直到Makefile文件的結(jié)束, 至少
28、可以找到一個(gè)不是規(guī)則生成的最終依賴文件,獲得此文 件的時(shí)間戳,然后從下到上依照規(guī)則鏈執(zhí)行目標(biāo)文件的時(shí)間 戳比此文件時(shí)間戳舊的規(guī)則,直到最頂層的規(guī)則。 l通過以上的分析過程,可以看到make的優(yōu)點(diǎn),因?yàn)?o目標(biāo)文件 依賴.c源文件,源碼文件里一個(gè)簡單改變都會(huì)造成那個(gè)文件被 重新編譯,并根據(jù)規(guī)則鏈依次由下到上執(zhí)行編譯過程,直到最 終的可執(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可寫為: 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ì)大小寫敏感,一般使用大寫宇母。變量的主要作 用如下: l保存文件名列表。 l保存可執(zhí)行命令名
30、,如編譯器。 l保存編譯器的參數(shù)。在很多源代碼編譯時(shí),gcc需要很長的參數(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è)文 本串就是變量的值。只要在一行的開始寫下這個(gè)變量的名字, 后面跟一個(gè)“”號(hào),以及要設(shè)定這個(gè)變量的值即可定義變量, 定義變量的語法: VARNAME=stri
31、ng l使用時(shí),把變量用括號(hào)括起來,并在前面加上$符號(hào),就可以 引用變量的值: $VARNAME、$(VARNAME) lmake解釋規(guī)則時(shí),VARNAME在等式右端展開為定義它的字符 串。變量一般都在Makefile的頭部定義。 47參考幻燈 項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用 利用變量把前面的Makefile重寫一遍: 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. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 試用期提前轉(zhuǎn)正了合同5篇
- 項(xiàng)目資金預(yù)算表-項(xiàng)目資金籌措與預(yù)算
- 建筑工程合同種類
- 2025年淮南資格證模擬考試
- 2025年江西貨運(yùn)從業(yè)資格證考試題答案解析大全
- 云服務(wù)器托管服務(wù)及支持合同
- 個(gè)人酒店承包經(jīng)營合同8篇
- 上海員工的勞動(dòng)合同范本5篇
- 課題申報(bào)書參考文獻(xiàn)格式
- 中國電建合同范本
- 農(nóng)村建房清包工合同協(xié)議書
- 鎳礦石購銷合同
- (新版)電工三級(jí)-職業(yè)技能等級(jí)認(rèn)定考試題庫(學(xué)生用)
- 《高性能樹脂》課件
- 中央2024年中央宣傳部直屬單位招聘106人筆試歷年典型考題及考點(diǎn)附答案解析
- 《教育向美而生-》讀書分享課件
- 拒絕校園欺凌從我做起完整版課件
- 幼兒園《認(rèn)識(shí)醫(yī)生和護(hù)士》課件
- 技術(shù)進(jìn)口合同登記證
- DZ∕T 0372-2021 固體礦產(chǎn)選冶試驗(yàn)樣品配制規(guī)范(正式版)
- 細(xì)菌的分離培養(yǎng)與培養(yǎng)特性觀察課件講解
評(píng)論
0/150
提交評(píng)論