UNIX系統(tǒng)中的程序開發(fā)課件_第1頁
UNIX系統(tǒng)中的程序開發(fā)課件_第2頁
UNIX系統(tǒng)中的程序開發(fā)課件_第3頁
UNIX系統(tǒng)中的程序開發(fā)課件_第4頁
UNIX系統(tǒng)中的程序開發(fā)課件_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

UNIX系統(tǒng)中的程序開發(fā)第一節(jié)UNIX的編程常識C語言標(biāo)準(zhǔn)ANSICANSI(美國國家標(biāo)準(zhǔn)局)于1989年制定,后被ISO(國際標(biāo)準(zhǔn)化組織)接受為標(biāo)準(zhǔn),故也稱為ISOC。目標(biāo):為各種操作系統(tǒng)上的C程序提供可移植性保證。該標(biāo)準(zhǔn)不僅定義了C的語法和語義,而且還定義了一個(gè)標(biāo)準(zhǔn)庫。該庫可根據(jù)頭文件劃分為15個(gè)部分:字符類型<ctype.h>、錯(cuò)誤碼<errno.h>、浮點(diǎn)常數(shù)<float.h>、數(shù)學(xué)常數(shù)<math.h>、標(biāo)準(zhǔn)定義<stddef.h>、標(biāo)準(zhǔn)I/O<stdio.h>、工具函數(shù)<stdlib.h>、字符串操作<string.h>、時(shí)間和日期<time.h>、可變參數(shù)表<stdarg.h>、信號<signal.h>等。POSIX、SVID、XPG……函數(shù)庫和系統(tǒng)調(diào)用glibcGNU的C函數(shù)庫,Linux上最重要的函數(shù)庫,定義了ISOC標(biāo)準(zhǔn)指定的所有的庫函數(shù),以及由POSIX或其他UNIX操作系統(tǒng)變種指定的附加特色,還包括與GNU系統(tǒng)相關(guān)的擴(kuò)展。其他重要函數(shù)庫系統(tǒng)調(diào)用庫和頭文件的保存位置函數(shù)庫/lib:系統(tǒng)必備共享庫/usr/lib:標(biāo)準(zhǔn)共享庫和靜態(tài)庫/usr/i486-linux-libc5/lib:libc5兼容性函數(shù)庫/usr/X11R6/lib:X11R6的函數(shù)庫/usr/local/lib:本地函數(shù)庫頭文件/usr/include:系統(tǒng)頭文件/usr/local/include:本地頭文件第二節(jié)UNIX中的編譯器cc命令gcc命令GNU的C和C++編譯器,可同時(shí)編譯并連接兩個(gè)或少數(shù)幾個(gè)C和C++源程序(通過源文件的后綴名來判斷是C程序還是C++程序)。gcc使用示例gcc的常用選項(xiàng)注:gcc命令只能編譯C++源文件,而不能自動(dòng)和C++程序使用的庫連接。因此,通常使用g++命令來完成編譯和連接。例:假設(shè)有兩個(gè)源文件main.c和factorial.c,現(xiàn)要編譯生成一個(gè)計(jì)算階乘的程序。/*factorial.c*/#include<stdio.h>#include<stdlib.h>intfactorial(intn){if(n<=1)return1;

elsereturnfactorial(n-1)*n;}/*main.c*/#include<stdio.h>#include<stdlib.h>intfactorial(intn);main(intargc,char**argv){intn;if(argc<2){

printf("Usage:%sn\n",argv[0]);return-1;}else{

n=atoi(argv[1]);

printf("Factorialof%dis%d.\n",n,factorial(n));}return0;}$gcc-ofactorialmain.cfactorial.cgcc的常用選項(xiàng)選項(xiàng) 解釋-c

只編譯并生成目標(biāo)文件。-DMACRO

以字符串“1”定義MACRO宏。-DMACRO=DEFN以字符串“DEFN”定義MACRO宏。-g

生成調(diào)試信息。-IDIRECTORY指定額外的頭文件搜索路徑DIRECTORY。-LDIRECTORY指定額外的函數(shù)庫搜索路徑DIRECTORY。-lLIBRARY 連接時(shí)搜索指定的函數(shù)庫LIBRARY。-oFILE

生成指定的輸出文件。-shared

生成共享目標(biāo)文件。通常用在建立共享庫時(shí)。-static

禁止使用共享連接。-UMACRO

取消對MACRO宏的定義。第三節(jié)控制軟件編譯過程的

工具—make為什么要使用make?包含多個(gè)源文件的軟件項(xiàng)目在編譯時(shí)都有長而復(fù)雜的命令行,make可以將它們保存在makefile文件中;make可以識別出那些被修改的文件并只編譯這些文件,減少了重編譯的時(shí)間;make在一個(gè)數(shù)據(jù)庫中維護(hù)了當(dāng)前項(xiàng)目中各文件的相互關(guān)系,從而在編譯前檢查是否可以找到所有需要的文件。makefile文件一個(gè)文本形式的數(shù)據(jù)庫,make工具借助于其完成并自動(dòng)維護(hù)編譯工作的文件,該文件按照某種語法進(jìn)行編寫,說明了如何編譯各個(gè)源文件并連接生成可執(zhí)行文件,定義了源文件之間的依賴關(guān)系。makefile文件的命名缺省:makefile或Makefile也可用make命令的-f選項(xiàng)指定makefile文件的基本結(jié)構(gòu)由若干規(guī)則構(gòu)成。規(guī)則的通用形式:taget:dependency1dependency2…… command command ……需要?jiǎng)?chuàng)建的二進(jìn)制文件或目標(biāo)文件創(chuàng)建target時(shí)所需的一個(gè)或多個(gè)文件創(chuàng)建target所需的命令步驟注:命令序列中每個(gè)命令的第一個(gè)字符必須是制表符;除非特別指定,否則make的工作目錄為當(dāng)前目錄。makefile的簡單例析行1

editor:editor.oscreen.okeyboard.o行2

gcc-oeditoreditor.oscreen.okeyboard.o行3

editor.o:editor.ceditor.hkeyboard.hscreen.h行4

gcc-ceditor.c行5

screen.o:screen.cscreen.h行6

gcc-cscreen.c行7

keyboard.o:keyboard.ckeyboard.h行8

gcc-ckeyboard.c行9

clean:

行10

rmeditor*.omakefile編寫的詳細(xì)規(guī)則偽目標(biāo)makefile中并不對應(yīng)于實(shí)際文件的目標(biāo)。執(zhí)行方式:make偽目標(biāo)名特殊的make目標(biāo):.PHONY它將其相關(guān)文件標(biāo)注為“不檢查存在性直接執(zhí)行相關(guān)命令”示例常用的偽目標(biāo):clean、install、all、dist等例:%makeclean行1

editor:editor.oscreen.okeyboard.o行2

gcc-oeditoreditor.oscreen.okeyboard.o行3

editor.o:editor.ceditor.hkeyboard.hscreen.h行4

gcc-ceditor.c行5

screen.o:screen.cscreen.h行6

gcc-cscreen.c行7

keyboard.o:keyboard.ckeyboard.h行8

gcc-ckeyboard.c行9

clean:

行10

rmeditor*.o.PHONY:clean變量定義方法:變量名=文本串引用方法:$(變量名)示例預(yù)定義變量環(huán)境變量行1

OBJS=editor.oscreen.okeyboard.o行2

HDRS=editor.hkeyboard.hscreen.h行3

editor:$(OBJS)行4

gcc-oeditor$(OBJS)行5

editor.o:editor.c$(HDRS)行6

gcc-ceditor.c行7

screen.o:screen.cscreen.h行8

gcc-cscreen.c行9

keyboard.o:keyboard.ckeyboard.h行10

gcc-ckeyboard.c行11.PHONY:clean行12

clean:

行13

rmeditor$(OBJS)make的主要預(yù)定義變量

變量含義$*不包含擴(kuò)展名的目標(biāo)文件名稱。$+所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件。$<第一個(gè)依賴文件的名稱。$?所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標(biāo)的創(chuàng)建日期晚。$@目標(biāo)的完整名稱。$^所有的依賴文件,以空格分開,不包含重復(fù)的依賴文件。$%如果目標(biāo)是歸檔成員,則該變量表示目標(biāo)的歸檔成員名稱。例如,如果目標(biāo)名稱為mytarget.so(image.o),則$@為mytarget.so,而$%為image.o。

make的主要預(yù)定義變量(續(xù))

預(yù)定義變量含義AR歸檔維護(hù)程序的名稱,默認(rèn)值為ar。ARFLAGS歸檔維護(hù)程序的選項(xiàng)。AS匯編程序的名稱,默認(rèn)值為as。ASFLAGS匯編程序的選項(xiàng)。CCC編譯器的名稱,默認(rèn)值為cc。CFLAGSC編譯器的選項(xiàng)。CPPC預(yù)編譯器的名稱,默認(rèn)值為$(CC)-E。CPPFLAGSC預(yù)編譯的選項(xiàng)。CXXC++編譯器的名稱,默認(rèn)值為g++。CXXFLAGSC++編譯器的選項(xiàng)。FCFORTRAN編譯器的名稱,默認(rèn)值為f77。FFLAGSFORTRAN編譯器的選項(xiàng)。行1

OBJS=editor.oscreen.okeyboard.o行2

HDRS=editor.hkeyboard.hscreen.h行3

editor:$(OBJS)行4

$(CC)

$^-o$@行5

editor.o:editor.c$(HDRS)行6

$(CC)-c$<行7

screen.o:screen.cscreen.h行8

$(CC)-c$<行9

keyboard.o:keyboard.ckeyboard.h行10

$(CC)-c$<行11.PHONY:clean行12

clean:

行13

rmeditor$(OBJS)隱含規(guī)則行1

OBJS=editor.oscreen.okeyboard.o行2

editor:$(OBJS)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論