UNIX系统中的程序开发课件_第1页
UNIX系统中的程序开发课件_第2页
UNIX系统中的程序开发课件_第3页
UNIX系统中的程序开发课件_第4页
UNIX系统中的程序开发课件_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UNIX系統中的程式開發第一節UNIX的編程常識C語言標準ANSICANSI(美國國家標準局)於1989年制定,後被ISO(國際標準化組織)接受為標準,故也稱為ISOC。目標:為各種操作系統上的C程式提供可移植性保證。該標準不僅定義了C的語法和語義,而且還定義了一個標準庫。該庫可根據頭檔劃分為15個部分:字元類型<ctype.h>、錯誤碼<errno.h>、浮點常數<float.h>、數學常數<math.h>、標準定義<stddef.h>、標準I/O<stdio.h>、工具函數<stdlib.h>、字串操作<string.h>、時間和日期<time.h>、可變參數表<stdarg.h>、信號<signal.h>等。POSIX、SVID、XPG……函數庫和系統調用glibcGNU的C函數庫,Linux上最重要的函數庫,定義了ISOC標準指定的所有的庫函數,以及由POSIX或其他UNIX操作系統變種指定的附加特色,還包括與GNU系統相關的擴展。其他重要函數庫系統調用庫和頭檔的保存位置函數庫/lib:系統必備共用庫/usr/lib:標準共用庫和靜態庫/usr/i486-linux-libc5/lib:libc5相容性函數庫/usr/X11R6/lib:X11R6的函數庫/usr/local/lib:本地函數庫頭檔/usr/include:系統頭檔/usr/local/include:本地頭檔第二節UNIX中的編譯器cc命令gcc命令GNU的C和C++編譯器,可同時編譯並連接兩個或少數幾個C和C++根源程式(通過原始檔案的尾碼名來判斷是C程式還是C++程式)。gcc使用示例gcc的常用選項注:gcc命令只能編譯C++原始檔案,而不能自動和C++程式使用的庫連接。因此,通常使用g++命令來完成編譯和連接。例:假設有兩個原始檔案main.c和factorial.c,現要編譯生成一個計算階乘的程式。/*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的常用選項選項 解釋-c

只編譯並生成目標檔。-DMACRO

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

生成調試資訊。-IDIRECTORY指定額外的頭檔搜索路徑DIRECTORY。-LDIRECTORY指定額外的函數庫搜索路徑DIRECTORY。-lLIBRARY 連接時搜索指定的函數庫LIBRARY。-oFILE

生成指定的輸出檔。-shared

生成共用目標檔。通常用在建立共用庫時。-static

禁止使用共用連接。-UMACRO

取消對MACRO宏的定義。第三節控制軟體編譯過程的

工具—make為什麼要使用make?包含多個原始檔案的軟體專案在編譯時都有長而複雜的命令行,make可以將它們保存在makefile檔中;make可以識別出那些被修改的檔並只編譯這些檔,減少了重編譯的時間;make在一個資料庫中維護了當前專案中各檔的相互關係,從而在編譯前檢查是否可以找到所有需要的檔。makefile檔一個文本形式的資料庫,make工具借助於其完成並自動維護編譯工作的檔,該檔按照某種語法進行編寫,說明了如何編譯各個原始檔案並連接生成可執行檔,定義了原始檔案之間的依賴關係。makefile檔的命名缺省:makefile或Makefile也可用make命令的-f選項指定makefile檔的基本結構由若干規則構成。規則的通用形式:taget:dependency1dependency2…… command command ……需要創建的二進位檔或目標檔創建target時所需的一個或多個檔創建target所需的命令步驟注:命令序列中每個命令的第一個字元必須是跳位字元;除非特別指定,否則make的工作目錄為當前目錄。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編寫的詳細規則偽目標makefile中並不對應於實際檔的目標。執行方式:make偽目標名特殊的make目標:.PHONY它將其相關檔標注為“不檢查存在性直接執行相關命令”示例常用的偽目標: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變數定義方法:變數名=文本串引用方法:$(變數名)示例預定義變數環境變數行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的主要預定義變數

變數含義$*不包含擴展名的目標檔案名稱。$+所有的依賴檔,以空格分開,並以出現的先後為序,可能包含重複的依賴檔。$<第一個依賴檔的名稱。$?所有的依賴檔,以空格分開,這些依賴檔的修改日期比目標的創建日期晚。$@目標的完整名稱。$^所有的依賴檔,以空格分開,不包含重複的依賴檔。$%如果目標是歸檔成員,則該變數表示目標的歸檔成員名稱。例如,如果目標名稱為mytarget.so(image.o),則$@為mytarget.so,而$%為image.o。

make的主要預定義變數(續)

預定義變數含義AR歸檔維護程式的名稱,默認值為ar。ARFLAGS歸檔維護程式的選項。AS組合語言程式的名稱,默認值為as。ASFLAGS組合語言程式的選項。CCC編譯器的名稱,默認值為cc。CFLAGSC編譯器的選項。CPPC預編譯器的名稱,默認值為$(CC)-E。CPPFLAGSC預編譯的選項。CXXC++編譯器的名稱,默認值為g++。CXXFLAGSC++編譯器的選項。FCFORTRAN編譯器的名稱,默認值為f77。FFLAGSFORTRAN編譯器的選項。行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)隱含規則行1

OBJS=editor.oscreen.okeyboard.o行2

editor:$(OBJS)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论