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

提交评论