版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2021/3/91LINUX 開發(fā)基礎(chǔ)湖北職院信息技術(shù)學(xué)院2021/3/92LINUX 開發(fā)基礎(chǔ)介紹開發(fā)基礎(chǔ)介紹nLinux 的編程概述的編程概述nLinuxLinux下下VIMVIM的使用的使用n編譯器編譯器GCCGCC的使用的使用n調(diào)試器調(diào)試器gdb的使用的使用n項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用2021/3/93Linux 編程環(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)目管理工具
2、。l編輯器Linux 中最常用的編輯器有 Vi(Vim)和 Emacsl編譯鏈接器在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ī),使程序員能夠把精力集中在代碼的編寫上而不是在源代碼的組織上。2021/3/94Linux 的編程概述的編程概述l庫和頭文件的保存位置庫和頭文件的保存位置 l函數(shù)庫函數(shù)庫 l/lib:系統(tǒng)必備
3、共享庫:系統(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:本地頭文件:本地頭文件 2021/3/95二、二、LinuxLinux下下VIMVIM的使用的使用lVIVI是是LinuxLinux最常用的編輯器,最常用的編輯器,LinuxLinux里提供的是里提供的是VIVI的加強(qiáng)版的加強(qiáng)版VIMVIM,但同但同VIVI是完全兼容。是完全兼容。
4、lVi 3Vi 3種基本工作模式:種基本工作模式:命令模式、插入模式、末行模式命令模式、插入模式、末行模式。2021/3/96二、二、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)入插入模式。l末行命令模式也是一種
5、常用模式,用于輸入命令末行命令模式也是一種常用模式,用于輸入命令進(jìn)行文字編輯的輔助功能。通過冒號(hào)進(jìn)行文字編輯的輔助功能。通過冒號(hào)“:”進(jìn)入進(jìn)入末行模式。例如末行模式。例如“:q”:q”2021/3/97二、二、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 ,也可以在配置文件中激活該功能。,也可以在配置文件中激活該功能。2021/3/98LinuxLinux下下VIMVIM的使用的使用lVimrc配置文件配置文件lVim在啟動(dòng)時(shí)會(huì)讀取該文件。該文件可以放在用戶目錄下在啟動(dòng)時(shí)會(huì)讀取該文件。該文件可以放在用戶目錄下/.vimrc
7、,/etc/vim/vimrcl編寫語法可參考編寫語法可參考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的使用的使用2021/3/99vi的常用命令的常用命令命令說明功能鍵h向左移一個(gè)字符 I向右移一個(gè)字符 J向上移一個(gè)字符 k向下移一個(gè)字符 0移至該行之首 Home $移至該行之末 End 2021/3/910
8、H 移至窗口的第一行 M 移至窗口的中間那行 L 移至窗口的最后一行 G 移至該文件的最后一行 nG 移至該文件的第 n 行 Ctrl+f 向后翻一頁 PageDown Ctrl+b 向前翻一頁 PageUp 移至該行的第一個(gè)非空白字符處 2021/3/911命令 說明 功能鍵 x 刪除光標(biāo)后的字符 Delete X 刪除光標(biāo)前的字符 dd 刪除光標(biāo)所在的行 ndd 刪除包括光標(biāo)所在行的n行文本 r 修改光標(biāo)所在字符 2021/3/912R 進(jìn)入替換狀態(tài),直到按Esc回到命令模式為止 Insert s 刪除光標(biāo)所在字符,并進(jìn)入輸入模式 S 刪除光標(biāo)所在的行,并進(jìn)入輸入模式 u 恢復(fù)剛才被修改的
9、文本 U 恢復(fù)光標(biāo)所在行的所有修改 . 重復(fù)上一次命令的操作 2021/3/913命令 說明 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)所在位置后面開始新增文本 2021/3/914命令 命令說明A 從光標(biāo)所在行最后面的地方開始新增文本 i 從光標(biāo)所在位置前面開始插入文本 I 從光標(biāo)所在列的第一個(gè)非空白字元前面開始插入文本 o 在光標(biāo)所在列下新增一行并進(jìn)入輸入模式 O 在光標(biāo)所在列上方新增一行并進(jìn)入輸入模式 2021/3/915命令 說明 :q 結(jié)束編輯 :q! 強(qiáng)制離開vi
10、,放棄存盤 :w 存盤 :w filename 將編輯內(nèi)容保存為名為filename的文件 :wq 存盤并退出 2021/3/916GCCGCC編譯器的使用編譯器的使用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。2021/3/917GCCGCC編譯器的使用編譯器的使用lGCC(GNU Compiler Collection)lGNU
11、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ā)編譯。2021/3/918GCCGCC編譯器的使用編譯器的使用lgcc則通過后綴來區(qū)別輸入文件的類別。 gcc所遵循的部分后綴約定規(guī)則:l.c : C語言源代碼文件; l.a : 是由目標(biāo)文件構(gòu)成的檔案庫文件; l.C,.cc或.cxx : 是C+源代碼文件; l.h : 是程序所包含的頭文件; l.i : 是已經(jīng)預(yù)處理過的C源代碼文件;l.ii
12、: 是已經(jīng)預(yù)處理過的C+源代碼文件;l.o : 是編譯后的目標(biāo)文件; l.s : 是匯編語言源代碼文件; l.S : 是經(jīng)過預(yù)編譯的匯編語言源代碼文件。 2021/3/919GCCGCC編譯器的使用編譯器的使用lGCCl通常gcc后跟一些選項(xiàng)和文件名來使用 GCC 編譯器 gcc options filenames 其中options就是編譯器所需要的參數(shù),filenames給出相關(guān)的文件名稱l例如:gcc o hello hello.c2021/3/920GCCGCC編譯器的使用編譯器的使用lGcc的編譯流程分4個(gè)步驟:l預(yù)處理(Pre-Processing)l編譯(Compiling)l匯
13、編(Assembling)l鏈接(Linking)l每個(gè)階段分別調(diào)用不同的工具進(jìn)行處理。預(yù)處理鏈接編譯匯編源 程 序(*.c)可執(zhí)行文件預(yù)處理器編譯器匯編器連接器2021/3/921GCCGCC編譯器的使用編譯器的使用預(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í)行文件或者建立庫文件。2021/3/922GCCGCC編譯器的使用編譯器的使用lGcc的編譯流程l預(yù)處
14、理階段: gcc E hello.c o hello.il編譯階段:gcc S hello.i o hello.sl匯編階段:gcc c hello.s o hello.ol鏈接階段:gcc hello.o o hellol執(zhí)行:./hello2021/3/923GCCGCC編譯器的使用編譯器的使用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為后綴的目標(biāo)文件,通常用于編譯不包含主程序的子程序文件。l-o output_filename
15、,確定輸出文件的名稱為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 . 2021/3/924GCCGCC編譯器的使用編譯器的使用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)生的可執(zhí)行文件的執(zhí)行效率可以提高,但是,編譯、連接的速度就相應(yīng)地要慢一些。l-O2,比-O更好的優(yōu)化編譯、連接,當(dāng)然
16、整個(gè)編譯、連接過程會(huì)更慢。2021/3/925GCCGCC編譯器的使用編譯器的使用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è)路徑中尋找。l-lname,在連接時(shí),裝載名字為“l(fā)ibname.a”的函數(shù)庫,該函數(shù)庫位于系統(tǒng)預(yù)設(shè)的目錄或者由-L選項(xiàng)確定的目錄下。例如,
17、-lm表示連接名為“l(fā)ibm.a”的數(shù)學(xué)函數(shù)庫。2021/3/926GCCGCC編譯器的使用編譯器的使用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.clgcc包含的c/c+編譯器 l一般c程序就用gcc編譯,c+程序就用g+編譯 2021/3/927GCCGCC編譯器的使用編譯器的使用l練習(xí)使用gcc編譯C源文件l通過Hello world程序,熟悉gcc及
18、其選項(xiàng)的使用。lHello Worldhello.Cint main (void) printf(“hello world!n”);return 0;編譯編譯$ gcc -o hello hello.c 2021/3/928GCCGCC編譯器的使用編譯器的使用l多個(gè)多個(gè)c文件文件兩個(gè)源文件兩個(gè)源文件 main.c 和和 factorial.c 兩個(gè)源文件,現(xiàn)在要編譯生成兩個(gè)源文件,現(xiàn)在要編譯生成一個(gè)計(jì)算階乘的程序。一個(gè)計(jì)算階乘的程序。 factorial.cint factorial (int n) if (n = 1) return 1; else return factorial (n -
19、 1) * n;2021/3/929GCCGCC編譯器的使用編譯器的使用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); printf (Factorial of %d is %d.n, n, factorial (n); return 0; 2021/3/930GCCGCC編譯
20、器的使用編譯器的使用l多個(gè)多個(gè)c文件文件編譯:編譯:$ gcc -o factorial main.c factorial.c 練習(xí)編譯多個(gè)練習(xí)編譯多個(gè)c文件文件2021/3/931Gdb 調(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í)行。 2021/3/932Gdb 調(diào)試器調(diào)試器lGdb 使用流程l要使用gdb進(jìn)行調(diào)試,一定要在編譯時(shí)加上調(diào)試選項(xiàng)“-g”。lgcc -g test.c -o testlgdb testl使用“help”命令查
21、看幫助信息。2021/3/933Gdb 調(diào)試器調(diào)試器lGdb的簡單使用l查看文件 ll設(shè)置斷點(diǎn) b 行號(hào)l查看斷點(diǎn)情況 info bl開始運(yùn)行代碼 r runl臨時(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)處停止。2021/3/934Gdb 調(diào)試器調(diào)試器lGdb 基本命令l通過查看 help 查找命令。lGdb 的 help 將其分成了很多種類(class)。l helpl Help “種類” 查
22、看該種類中的命令列表l Help 命令l已知命令名:Help 命令2021/3/935Gdb 調(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)的操作2021/3/936Gdb 調(diào)試器調(diào)試器lGdb 基本命令l設(shè)置斷點(diǎn)與恢復(fù)命令2021/3/937Gdb 調(diào)試器調(diào)試器lGdb 基本命令l設(shè)置斷點(diǎn)有多種方式:l函數(shù)斷點(diǎn): “b 函數(shù)”此時(shí)的斷點(diǎn)實(shí)際是在函數(shù)的定義處l條件斷點(diǎn):b 行數(shù)或函數(shù)名 if 表達(dá)式b 8 if i=102021/3/938Gdb 調(diào)試器調(diào)試器lGdb 基本命令lGdb 中源碼查看相關(guān)命令2021/3/939
23、Gdb 調(diào)試器調(diào)試器lGdb 基本命令lGdb 中查看運(yùn)行數(shù)據(jù)相關(guān)命令2021/3/940項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用lMake介紹lMake是一種控制編譯或者重復(fù)編譯軟件的非常重要的工具。Make 可自動(dòng)決定一個(gè)大程序中哪些文件需要重新編譯,并執(zhí)行重新編譯它們的命令。 l要使用make,必須編寫一個(gè)叫做Makefile的文件。Makefile文件是定義make如何執(zhí)行的規(guī)則文件,它包含一些規(guī)則告訴make工具編譯哪些文件、怎么編譯以及在什么條件下去編譯。lMakefile寫好之后,每次改變了某些源文件,只要執(zhí)行make命令,所有必要的重新編譯將執(zhí)行。lMake程序通過
24、比較目標(biāo)文件的生成時(shí)間和其所依賴的源文件的最后修改時(shí)間和來決定是否執(zhí)行makefile中定義的命令來更新該目標(biāo)文件。2021/3/941項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用l例子:hello:hello.ogcc hello.o o hellohello.o: hello.cgcc c hello.c o hello.o則輸入:make即可生成可執(zhí)行程序hello2021/3/942項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用lMakefile文件的基本結(jié)構(gòu)lMakefile包含一些規(guī)則來告訴make處理哪些文件以及如何處理這些文件。l這些規(guī)則主要是描述哪些文件(稱為t
25、arget目標(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),是make執(zhí)行的動(dòng)作,通常是把指定的相關(guān)文件編譯成目標(biāo)文件的編譯命令,每個(gè)命令占一行,且每個(gè)命令行的起始字符必須為TAB字符。 2021/3/943項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用lMakefile文件的基本結(jié)構(gòu)lMakefile規(guī)則的一般
26、形式如下: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)用make命令可輸入:# make targettarget是Makefile文件中定義的目標(biāo)之一,如果省略target,make就將生成Makefile文件中定義的第一個(gè)目標(biāo)。2021/3/944項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用lmake處理make
27、file文件的過程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é)束,至少可以找到一個(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ī)則鏈依
28、次由下到上執(zhí)行編譯過程,直到最終的可執(zhí)行文件被重新連接。2021/3/945項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用l例子:l設(shè)一項(xiàng)目中包函頭源文件prog.c、sub.c和一頭文件sub.h,并在源文件prog.c、sub.c中都包含了頭文件sub.hl則Makefile可寫為:ltest:prog.o sub.ogcc -o test prog.o sub.olprog.o:prog.c sub.hgcc -c prog.c o prog.olsub.o:sub.c sub.hgcc c sub.c -o sub.olclean:rm -f *.o test運(yùn)行 make命令即
29、生成test運(yùn)行 make clean清除生成的文件2021/3/946項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用lMakefile中的變量中的變量lMakefile里的變量對(duì)大小寫敏感,一般使用大寫宇母。變量的主要作用如下: l保存文件名列表。l保存可執(zhí)行命令名,如編譯器。l保存編譯器的參數(shù)。在很多源代碼編譯時(shí),gcc需要很長的參數(shù)選項(xiàng),在很多情況下,所有的編譯命令使用一組相同的選項(xiàng),如果把這組選項(xiàng)使用一個(gè)變量代表,那么可以把這個(gè)變量放在所有引用編譯器的地方。當(dāng)要改變選項(xiàng)的時(shí)候,只需改變一次這個(gè)變量的內(nèi)容即可。2021/3/947項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用
30、lMakefile中的變量中的變量lMakefile中的變量是用一個(gè)文本串在Makefile中定義的,這個(gè)文本串就是變量的值。只要在一行的開始寫下這個(gè)變量的名字,后面跟一個(gè)“”號(hào),以及要設(shè)定這個(gè)變量的值即可定義變量,定義變量的語法: VARNAME=stringl使用時(shí),把變量用括號(hào)括起來,并在前面加上$符號(hào),就可以引用變量的值: $VARNAME、$(VARNAME)lmake解釋規(guī)則時(shí),VARNAME在等式右端展開為定義它的字符串。變量一般都在Makefile的頭部定義。2021/3/948項(xiàng)目管理工具項(xiàng)目管理工具makemake的使用的使用利用變量把前面的Makefile重寫一遍:OBJS=prog.o sub.oCC=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.o clean:rm f *.o test20
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版船舶設(shè)備維修保養(yǎng)綜合服務(wù)合同3篇
- 2024版河道清渠建設(shè)施工協(xié)議范本一
- 2024甲乙雙方就電子商務(wù)平臺(tái)建設(shè)與運(yùn)營之合作協(xié)議
- 九下語文《送東陽馬生序》閱讀問答題必刷必背(答案版)
- 2024年退役士兵供養(yǎng)合同3篇
- 2024弱電智能化系統(tǒng)集成與調(diào)試服務(wù)合同2篇
- 2024年物流司機(jī)勞務(wù)合同
- ups不間斷電源建設(shè)項(xiàng)目合同(2024年)
- 2024年龍門吊設(shè)備租賃服務(wù)協(xié)議版B版
- 2024年石料供應(yīng)合同模板3篇
- 八年級(jí)數(shù)學(xué)上冊(cè)《第十八章 平行四邊形》單元測(cè)試卷及答案(人教版)
- 中職計(jì)算機(jī)應(yīng)用基礎(chǔ)教案
- 盤龍煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 消防安全評(píng)估質(zhì)量控制體系(2020年整理)課件
- 新生兒沐浴及撫觸護(hù)理
- 理想氣體的性質(zhì)與熱力過程
- 2022年浙江省各地市中考生物試卷合輯7套(含答案)
- 性病轉(zhuǎn)診與會(huì)診制度
- 教學(xué)案例 英語教學(xué)案例 市賽一等獎(jiǎng)
- 南京市勞動(dòng)合同書(全日制文本)
- GB/T 28859-2012電子元器件用環(huán)氧粉末包封料
評(píng)論
0/150
提交評(píng)論