LINUX環(huán)境高級(jí)編程(三)_第1頁
LINUX環(huán)境高級(jí)編程(三)_第2頁
LINUX環(huán)境高級(jí)編程(三)_第3頁
LINUX環(huán)境高級(jí)編程(三)_第4頁
LINUX環(huán)境高級(jí)編程(三)_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、LINUX環(huán)境高級(jí)編程中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 朱靜朱靜中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院LINUX下下C編程概述編程概述v程序安裝目錄程序安裝目錄/usr/local /usr/bin /usr/local/binv編程語言編程語言C C+ Java JavaScriptPerl Python PHP .(LP P4 表1-1)中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院LINUX下下C編程概述編程概述v頭文件目錄頭文件目錄/usr/include /us

2、r/include/sys(linux)v庫文件目錄庫文件目錄/lib /usr/lib*.a *.sovGCC是是GNU項(xiàng)目的編譯組件之一項(xiàng)目的編譯組件之一GCC編譯器能將C,C+源程序,匯編程序和目標(biāo)程序編譯鏈接成為可執(zhí)行文件。v四個(gè)編譯步驟四個(gè)編譯步驟預(yù)處理(也叫預(yù)編譯,preprocessing)編譯(compliling)匯編(assembling)鏈接(linking)中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院GCC編譯器編譯器GCC編譯器編譯器vGCC的基本用法和選項(xiàng)的基本用法和選項(xiàng) 一般格式:gcc options filenames 例:gcc o hell

3、o hello.cOptions選項(xiàng):-c-o-O-On-g,-ggdb-shared-static-thread中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院vGCC編譯過程中的文件類型編譯過程中的文件類型*.c C語言源代碼文件*.a 由目標(biāo)文件構(gòu)成的檔案庫文件 *.C,*.cc,*.cxx C+源代碼文件*.h 程序所包含的頭文件*.i 已經(jīng)預(yù)處理過的C源代碼文件*.ii 已經(jīng)預(yù)處理過的C+源代碼文件*.m Objective-C源代碼文件 *.o 編譯后的目標(biāo)文件*.s 匯編語言源代碼文件*.S 經(jīng)過預(yù)編譯的匯編語言源代碼文件中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武

4、漢)計(jì)算機(jī)學(xué)院GCC編譯器編譯器vGCC 警告提示功能警告提示功能gcc pedantic hello.c o hello 發(fā)現(xiàn)一些不符合發(fā)現(xiàn)一些不符合ANSI/ISO C標(biāo)準(zhǔn)的代碼標(biāo)準(zhǔn)的代碼 gcc Wall hello.c o hello 產(chǎn)生盡可能多的警告產(chǎn)生盡可能多的警告 庫依賴gcc hell.c I/home/include o hellogcc -o fred fred.c -lmgcc -o fred fred.c /usr/lib/libm.a 代碼優(yōu)化gcc On hello.c o hello中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院GCC編譯器編譯器v

5、GCC的版本的版本 $gcc v 或 $gcc -version 查看gcc的版本,內(nèi)核不同,可能gcc的版本不同 GCC是一組編譯工具的總稱C編譯器 cc, ccl, ccplus, gccC+編譯器 c+, ccplus, g+源碼預(yù)處理器 cpp, cpp0庫文件 libgcc.a, libgcc_eh.a, libgcc_s.so 幫助man gcc 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院GCC編譯器編譯器例:hello.c#include int main(int argc,char *argv)Printf(“Hello,linux!n”);編譯:gcc o

6、hello hello.c運(yùn)行:./hello中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院GCC編譯器編譯器例:創(chuàng)建一個(gè)小型靜態(tài)函數(shù)庫,其中包含兩個(gè)函數(shù),并在一個(gè)例程中調(diào)用函數(shù)。(LP P9 靜態(tài)庫)中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院GCC編譯器編譯器vIDE開發(fā)環(huán)境開發(fā)環(huán)境IDE是一個(gè)圖形化集成開發(fā)環(huán)境,將創(chuàng)建、調(diào)試、運(yùn)行應(yīng)用程序的部分或所有工具集成到一起。一般會(huì)包含一個(gè)編輯器,一個(gè)文件瀏覽器和一種運(yùn)行應(yīng)用程序并捕獲其輸出的方法。 Kdevelop Eclipse Anjuta Netbeans Qt SlickEdit Code:Blocks中國地

7、質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院開發(fā)工具開發(fā)工具v命令行工具命令行工具 源代碼控制源代碼控制中大型團(tuán)隊(duì)項(xiàng)目開發(fā)中,通過源代碼控制,避免項(xiàng)目組多個(gè)開發(fā)人員文件修改的沖突,跟蹤管理對(duì)源文件進(jìn)行的修改。 SCCS:已基本被RCS取代。RCS: 源代碼版本管理工具, 通過RCS文件進(jìn)行源文件管理。跟蹤并記錄源文件的每一次改動(dòng)。通過這個(gè)記錄文件,可以重建出任何一個(gè)以前的版本。RCS只保存文件版本間的不同之處,節(jié)省存儲(chǔ)空間。RCS通常以.v為后綴。不支持并發(fā)訪問(互斥訪問)。( lock-modify-unlock )中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院開發(fā)工

8、具開發(fā)工具v命令行工具命令行工具 源代碼控制源代碼控制CVS:(Current Version Control)并發(fā)版本控制系統(tǒng);CVS在進(jìn)行源代碼管理時(shí)的特點(diǎn):源代碼空間與用戶空間分離并發(fā)訪問(Copy-Modify-Merge)源文件共享獨(dú)立的工作環(huán)境CVS使用手冊:http:/ CVS 替代版;中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院開發(fā)工具開發(fā)工具v命令行工具命令行工具 發(fā)行軟件發(fā)行軟件patchtarv軟件包管理工具軟件包管理工具 rpm dpkg Alien-rpm和和dpkg之間的格式轉(zhuǎn)換工具之間的格式轉(zhuǎn)換工具v編寫手冊頁編寫手冊頁 手冊頁格式手冊頁格式 手冊

9、頁生成手冊頁生成groff 手冊頁安裝手冊頁安裝中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院開發(fā)工具開發(fā)工具v工程管理器工程管理器Makefile規(guī)定整個(gè)工程(規(guī)定整個(gè)工程(project)的編譯規(guī)則。)的編譯規(guī)則。一個(gè)工程中的源文件不計(jì)其數(shù),按類型,功能,模塊分別放在不同的目錄中,Makefile通過定義一系列的規(guī)則來實(shí)現(xiàn)“自動(dòng)化編譯”。一旦寫好Makefile,只需要一個(gè)make命令,就能完成整個(gè)工程的編譯。中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 make命令命令功能:功能:查找當(dāng)前目錄下的makefile文件;初始化文件中的變量;分析makefile

10、中的所有規(guī)則;為所有的目標(biāo)文件創(chuàng)建依賴關(guān)系;根據(jù)依賴關(guān)系,決定哪些目標(biāo)文件要重新生成;執(zhí)行生成命令;特點(diǎn):特點(diǎn):提高工作效率,便于大型項(xiàng)目的開發(fā)。中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 make命令的語法命令的語法make 參數(shù) 宏定義 目標(biāo)文件參數(shù):參數(shù):-k make過程中發(fā)現(xiàn)錯(cuò)誤時(shí)執(zhí)行仍然繼續(xù)-n 只輸出要執(zhí)行的操作步驟而不真正執(zhí)行這些步驟-f 或-file 指定make要執(zhí)行的makefile文件名-w make時(shí)修改了目錄則打印信息-d 打印調(diào)試信息-I 指定makefile文件的目錄-h help中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 一

11、個(gè)實(shí)例:一個(gè)實(shí)例:/*main.c*/#include mytool1.h #include mytool2.h int main(int argc,char *argv) mytool1_print(hello); mytool2_print(hello); 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 一個(gè)實(shí)例:一個(gè)實(shí)例:/*mytool1.c*/#include mytool1.h void mytool1_print(char *print_str) printf(This is mytool1 print %sn,print_str); /*mytool2.c*/#i

12、nclude mytool2.h void mytool2_print(char *print_str) printf(This is mytool2 print %sn,print_str); 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院/*mytool1.h*/#ifndef _MYTOOL_1_H #define _MYTOOL_1_H void mytool1_print(char *print_str); #endif /*mytool2.h*/#ifndef _MYTOOL_2_H #define _MYTOOL_2_H void mytool2_print(cha

13、r *print_str); #endif 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院#makefile文件main:main.o mytool1.o mytool2.o main:main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytool2.o main.o:main.c mytool1.h mytool2.h main.o:main.c mytool1.h mytool2.h gcc -c main.c gcc -c main.c

14、 mytool1.o:mytool1.c mytool1.h mytool1.o:mytool1.c mytool1.h gcc -c mytool1.c gcc -c mytool1.c mytool2.o:mytool2.c mytool2.h mytool2.o:mytool2.c mytool2.h gcc -c mytool2.cgcc -c mytool2.c將前述所有文件放到同一個(gè)文件夾中,執(zhí)行make命令,則生成可執(zhí)行文件main。$make 執(zhí)行makefile文件$./main 運(yùn)行main程序中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院make的工作過程m

15、ain.cmytool1.hmytool2.hmytool1.cmytool1.hmytool2.cmytool2.hmain.omytool1.omytool2.omain中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院make的工作過程1. make會(huì)在當(dāng)前目錄下找名字為“makefile”的文件2.如果找到,它會(huì)找文件中的第一個(gè)目標(biāo)文件(如main),并把這個(gè)文件做為最終的目標(biāo)文件。 3. 如果目標(biāo)文件不存在,或者目標(biāo)所依賴的文件的修改時(shí)間比目標(biāo)文件新,make就會(huì)執(zhí)行后面所定義的規(guī)則來生成目標(biāo)文件。4. 如果目標(biāo)和目標(biāo)依賴的文件都存在,且修改時(shí)間最新,則根據(jù)依賴文件的依賴關(guān)

16、系和文件修改時(shí)間決定是否按規(guī)則生成依賴文件,以此類推。5. 如果所有文件都找到,make先生成中間依賴文件(例如.o文件),再用依賴文件生成最終的目標(biāo)文件。中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 Makefile的文件名 make默認(rèn)會(huì)在當(dāng)前目錄下按順序?qū)ふ椅募麨椋篏NUmakefile,makefile,Makefile的文件,找到后解釋執(zhí)行。 最好使用Makefile這個(gè)文件名,大多數(shù)make都支持makefile和Makefile這兩個(gè)文件名。 最好不用GNUmakefile。 可以用其它的文件名來充當(dāng)makefile文件,用make命令的-f或-file參數(shù)指定

17、文件。例: $make -f make.linux $make -file Make.AIX 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 Makefile的內(nèi)容1 顯式規(guī)則。說明了如何生成一個(gè)或多個(gè)目標(biāo)文件。明確指出的要生成的文件,文件的依賴文件,生成的命令等。2 隱含規(guī)則。make命令的自動(dòng)推導(dǎo)自動(dòng)推導(dǎo),可以比較簡略地書寫makefile。3 宏的定義。當(dāng)makefile被執(zhí)行時(shí),定義的宏會(huì)被擴(kuò)展到相應(yīng)的引用位置上去。中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 Makefile的內(nèi)容4 文件指示。包含了三個(gè)部分。一個(gè)是在一個(gè)Makefile中引用另一個(gè)Ma

18、kefile;另一個(gè)是指根據(jù)某些條件指定Makefile中的有效部分,與C語言中的預(yù)編譯#if類似;第三包含一個(gè)多行的命令。5 注釋。Makefile中只有行注釋“#”,如果要使用“#”字符,需要用轉(zhuǎn)義字符進(jìn)行轉(zhuǎn)義:“#”6 特殊字符-:make時(shí)忽略所有錯(cuò)誤;:執(zhí)行某些命令時(shí)不顯示該命令。例如echo說明信息。中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院Makefile的基本語法規(guī)則目標(biāo)文件:依賴文件列表目標(biāo)文件:依賴文件列表命令列表命令列表例:main:main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytoo

19、l2.o main.o:main.c mytool1.h mytool2.h gcc -c main.c mytool1.o:mytool1.c mytool1.h gcc -c mytool1.c mytool2.o:mytool2.c mytool2.h gcc -c mytool2.c中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院Makefile的宏定義例:OBJ = main.o mytool1.o mytool2.o CC = gccmain:$(OBJ)$(CC) -o main $(OBJ) main.o:main.c mytool1.h mytool2.h $(C

20、C) -c main.c mytool1.o:mytool1.c mytool1.h $(CC) -c mytool1.c mytool2.o:mytool2.c mytool2.h $(CC) -c mytool2.c中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院make的自動(dòng)推導(dǎo)(隱含規(guī)則,內(nèi)置規(guī)則)make命令只要發(fā)現(xiàn)一個(gè).o文件,就會(huì)自動(dòng)地把.c文件加在依賴關(guān)系中。如果make找到一個(gè)whatever.o,那么whatever.c就會(huì)是whatever.o的依賴文件。并且生成規(guī)則默認(rèn)為cc c whatever.o whatever.c。 make -p 打印所有make

21、命令的自動(dòng)推導(dǎo)規(guī)則中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院make的自動(dòng)推導(dǎo)例:OBJ= main.o mytool1.o mytool2.o CC=gccmain:$(OBJ)$(CC) -o main $(OBJ) main.o: mytool1.h mytool2.h mytool1.o: mytool1.h mytool2.o: mytool2.h 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 模式規(guī)則模式規(guī)則模式規(guī)則可以自定義一個(gè)隱含規(guī)則。模式規(guī)則可以自定義一個(gè)隱含規(guī)則。模式規(guī)則中目標(biāo)的定義要有“%”字符,用來表示一個(gè)或多個(gè)任意字符。依賴目標(biāo)的定義

22、中也可以使用“%”,但依賴目標(biāo)中的“%”的取值,取決于其目標(biāo)。 說明:“%”的展開發(fā)生在變量和函數(shù)的展開之后,變量和函數(shù)的展開發(fā)生在make載入Makefile時(shí),而模式規(guī)則中的“%”則發(fā)生在執(zhí)行make時(shí)。 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 模式規(guī)則模式規(guī)則例:例:CC=gccCC=gccCFLAGS=CFLAGS=CPPFLAGS=CPPFLAGS= %.o%.o : : %.c %.c $(CC)$(CC) -c-c $(CFLAGS)$(CFLAGS) $(CPPFLAGS)$(CPPFLAGS) $ -o-o $ 這個(gè)例子表示了這個(gè)例子表示了,把所有的把所

23、有的.c文件都編譯成文件都編譯成.o文件文件。 其中,其中,$表示當(dāng)前所有目標(biāo),表示當(dāng)前所有目標(biāo),$表示當(dāng)前所有表示當(dāng)前所有依賴文件。這些變量叫依賴文件。這些變量叫自動(dòng)化變量自動(dòng)化變量。 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 模式規(guī)則模式規(guī)則-自動(dòng)化變量(內(nèi)置宏)自動(dòng)化變量(內(nèi)置宏)$?當(dāng)前目標(biāo)依賴的文件列表中比當(dāng)前目標(biāo)新的文件$當(dāng)前所有目標(biāo)名$當(dāng)前所有依賴文件名$*不含后綴名的當(dāng)前依賴文件名 (LP P323表9-1)中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 引用其他的引用其他的Makefile文件文件在一個(gè)Makefile文件中,可以使用incl

24、ude 關(guān)鍵字把別的Makefile包含進(jìn)來。被包含的文件會(huì)原樣插入到被包含的位置上。引用格式: include 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 文件搜尋文件搜尋在一些大的工程中,有大量的源文件,通常的做法是把源文件分類,放在不同的目錄中。當(dāng)make需要去找尋文件的依賴關(guān)系時(shí),可以在文件前加上路徑 。lMakefile文件中的特殊變量VPATH VPATH = src:./headers 指定兩個(gè)目錄,“src”和“./headers”,make會(huì)按照這個(gè)順序進(jìn)行搜索。 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 文件搜尋文件搜尋lmake的“v

25、path”關(guān)鍵字 三種使用方法:三種使用方法: 1、vpath 為符合模式的文件指定搜索目錄。 2、vpath 清除符合模式的文件的搜索目錄。 3、vpath 清除所有已被設(shè)置好了的文件搜索目錄。中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 文件搜尋文件搜尋lmake的“vpath”關(guān)鍵字 需要包含“%”字符?!?”表示匹配零或若干字符。例:%.h 表示所有以“.h”結(jié)尾的文件。例:vpath %.h ./headers 表示要求make在“./headers”目錄下搜索所有以“.h”結(jié)尾的文件。(如果某文件在當(dāng)前目錄沒有找到的話) vpath %.c foo:bar vpat

26、h %.c blish 連續(xù)使用vpath中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 偽目標(biāo)偽目標(biāo)如果Makefile需要一次生成若干個(gè)可執(zhí)行文件,可以使用“偽目標(biāo)”例: all : prog1 prog2 prog3.PHONY : all prog1 : prog1.o utils.o cc -o prog1 prog1.o utils.o prog2 : prog2.o cc -o prog2 prog2.o prog3 : prog3.o sort.o utils.o cc -o prog3 prog3.o sort.o utils.o中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中

27、國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 偽目標(biāo)偽目標(biāo)lMakefile中的第一個(gè)目標(biāo)會(huì)被作為其默認(rèn)目標(biāo)。l“.PHONY : all”聲明了“all”這個(gè)目標(biāo)為“偽目標(biāo)”。其依賴于其它三個(gè)目標(biāo)。l偽目標(biāo)的特性是,總是被執(zhí)行的,所以其依賴的那三個(gè)目標(biāo)就總是不如“all”這個(gè)目標(biāo)新。所以,其它三個(gè)目標(biāo)的規(guī)則總是會(huì)被編譯。也就達(dá)到了一口氣生成多個(gè)目標(biāo)文件的目的。中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 偽目標(biāo)偽目標(biāo)例:OBJ= main.o mytool1.o mytool2.o CC=gccmain:$OBJ$CC -o main $OBJ main.o:main.c mytool1.h

28、 mytool2.h $CC -c main.c mytool1.o:mytool1.c mytool1.h $CC -c mytool1.c mytool2.o:mytool2.c mytool2.h $CC -c mytool2.cclean: rm *.o temp 編譯過程中生成了許多中間文件,定義一個(gè)清除它們的“目標(biāo)”以備完整地重編譯而用。 (clean這個(gè)偽目標(biāo)后沒有給出依賴關(guān)系的文件,因此不會(huì)被執(zhí)行。執(zhí)行make clean來使用該目標(biāo)。) clean這個(gè)“偽目標(biāo)”并不是一個(gè)文件,只是一個(gè)標(biāo)簽 (lable)。中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 多目標(biāo)(

29、多個(gè)目標(biāo)同時(shí)依賴于一個(gè)文件,并且多目標(biāo)(多個(gè)目標(biāo)同時(shí)依賴于一個(gè)文件,并且其生成的命令大體類似)其生成的命令大體類似) 例:bigoutput littleoutput : text.g generate text.g -$(subst output,$) $ 上述規(guī)則等價(jià)于:bigoutput : text.g generate text.g -big bigoutputlittleoutput : text.g generate text.g -little littleoutput 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 顯示命令顯示命令 make會(huì)把其要執(zhí)行的命令行

30、在命令執(zhí)行前輸出到屏幕上。用“”字符在命令行前,這個(gè)命令將不被顯示。如果make執(zhí)行時(shí),帶參數(shù)“-n”或“-just-print”,那么只顯示命令,不執(zhí)行命令。make參數(shù)“-s”或“-slient”,全面禁止命令的顯示。例: echo 正在編譯XXX模塊. 當(dāng)make執(zhí)行時(shí),會(huì)輸出“正在編譯XXX模塊.”字串,但不會(huì)輸出命令,如果沒有“”,那么,make將輸出: echo 正在編譯XXX模塊. 正在編譯XXX模塊.中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 函數(shù)函數(shù) 函數(shù)的調(diào)用語法函數(shù)的調(diào)用語法函數(shù)調(diào)用,很像變量的使用,也是以“$”來標(biāo)識(shí)的,其語法如下: $( )或是 $

31、例:comma= ,empty=space= $(empty) foo= a b cbar= $(subst $(space),$(comma),$(foo)subst函數(shù)把$(foo)中的空格替換成逗號(hào),所以$(bar)的值是“a,b,c”。 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 函數(shù)函數(shù) 字符串處理函數(shù):字符串處理函數(shù):字符串替換函數(shù)字符串替換函數(shù) $(subst ,) 模式字符串替換函數(shù)模式字符串替換函數(shù) $(patsubst ,) 去空格函數(shù)去空格函數(shù) $(strip )查找字符串函數(shù)查找字符串函數(shù) $(findstring ,)文件操作函數(shù)文件操作函數(shù) :取目

32、錄函數(shù)取目錄函數(shù) $(dir ) 取文件函數(shù)取文件函數(shù) $(notdir ) 取后綴函數(shù)取后綴函數(shù) $(suffix ) foreach函數(shù)函數(shù)$(foreach ,) if 函數(shù)函數(shù) call函數(shù)函數(shù)中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院 make的退出碼的退出碼 make命令執(zhí)行后有三個(gè)退出碼: 0 表示成功執(zhí)行。1 如果make運(yùn)行時(shí)出現(xiàn)任何錯(cuò)誤,其返回1。2 如果使用了make的“-q”選項(xiàng),并且make使得一些目標(biāo)不需要更新,那么返回2。-q make操作將根據(jù)目標(biāo)文件是否已更新返回0或非0的狀態(tài)信息 中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院中國地質(zhì)大學(xué)(武漢)計(jì)算機(jī)學(xué)院vGDB是是GNU開源組織發(fā)布的一個(gè)強(qiáng)大開源組織發(fā)布的一個(gè)強(qiáng)大的的UNIX下的命令行程序調(diào)試工具下的命令行程序調(diào)試工具 功能功能l 啟動(dòng)程序l 可以讓被調(diào)試的程序在指定的斷點(diǎn)位置停止l 當(dāng)程序停住時(shí),可檢查發(fā)生的事件l 動(dòng)態(tài)地改變程序執(zhí)行環(huán)境 注意:注意: 編譯時(shí)加上-g或-ggdb選項(xiàng),并且不使用-On參數(shù)進(jìn)行代碼優(yōu)化,才能使用gdb調(diào)試工具。

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論