当前位置:文档之家› 操作系统 第六章

操作系统 第六章

它将其相关文件标注为“ 它将其相关文件标注为“不检查存在性直接执 行相关命令” 行相关命令” 示例
– 常用的伪目标:clean、install、all、dist等 常用的伪目标: 、 、 、 等
@2003年
余晓制作
版权所有
行1 行2 行3 行4 行5 行6 行7 行8
editor : editor.o screen.o keyboard.o gcc -o editor editor.o screen.o keyboard.o editor.o : editor.c editor.h keyboard.h screen.h gcc -c editor.c screen.o : screen.c screen.h gcc -c screen.c keyboard.o : keyboard.c keyboard.h gcc -c keyboard.c .PHONY : clean 行9 clean : rm editor *.o 行10
@2003年 余晓制作 版权所有
make 的主要预定义变量
变量 $* $+ $< $? $@ $^ $% 含 义 不包含扩展名的目标文件名称。 不包含扩展名的目标文件名称。 所有的依赖文件,以空格分开,并以出现的先后为序, 所有的依赖文件,以空格分开,并以出现的先后为序, 可能包含重复的依赖文件。 可能包含重复的依赖文件。 第一个依赖文件的名称。 第一个依赖文件的名称。 所有的依赖文件,以空格分开,这些依赖文件的修改日 所有的依赖文件,以空格分开, 期比目标的创建日期晚。 期比目标的创建日期晚。 目标的完整名称。 目标的完整名称。 所有的依赖文件,以空格分开,不包含重复的依赖文件。 所有的依赖文件,以空格分开,不包含重复的依赖文件。 如果目标是归档成员,则该变量表示目标的归档成员名 如果目标是归档成员, 例如,如果目标名称为 称。例如,如果目标名称为mytarget.so(image.o),则 $@为mytarget.so,而$%为image.o。
源文件, 注:gcc命令只能编译 gcc命令只能编译C++源文件,而不能自动和 命令只能编译 源文件 而不能自动和C++程序 程序 使用的库连接。因此,通常使用g++命令来完成编译和连接。 使用的库连接。因此,通常使用 命令来完成编译和连接
– gcc使用示例 使用示例 – gcc的常用选项 的常用选项
缺省:makefile或 缺省:makefile或Makefile 也可用make命令的也可用make命令的-f选项指定 make命令的
@2003年 余晓制作 版权所有
3. makefile文件的基本结构 文件的基本结构
– 由若干规则构成。 由若干规则构成。 – 规则的通用形式: 规则的通用形式: taget : dependency1 dependency2 …… command 创建target时所需的 创建 时所需的 需要创建的 一个或多个文件 command 二进制文件 或目标文件 创建target所需 创建 所需 ……
@2003年 余晓制作 版权所有
第三节 控制软件编译过程的 工具 — make
为什么要使用make make? 1. 为什么要使用make?
– 包含多个源文件的软件项目在编译时 都有长而复杂的命令行, 都有长而复杂的命令行,make可以将 可以将 它们保存在makefile文件中; 文件中; 它们保存在 文件中 – make可以识别出那些被修改的文件并 可以识别出那些被修改的文件并 只编译这些文件, 只编译这些文件,减少了重编译的时 间; – make在一个数据库中维护了当前项目 在一个数据库中维护了当前项目 中各文件的相互关系, 中各文件的相互关系,从而在编译前 检查是否可以找到所有需要的文件。 检查是否可以找到所有需要的文件。
– 其他重要函数库 – 系统调用
@2003年 余晓制作 版权所有
3. 库和头文件的保存位置 – 函数库
/lib:系统必备共享库 : /usr/lib:标准共享库和静态库 : /usr/i486-linux-libc5/lib:libc5兼容性函数 : 兼容性函数 库 /usr/X11R6/lib:X11R6 的函数库 : /usr/local/lib:本地函数库 :
第六章 UNIX系统中的程序开发 系统中的程序开发
@2003年
余晓制作
版权所有
第一节
– ANSI C
ANSI(美国国家标准局) 1989年制定,后被ISO ANSI(美国国家标准局)于1989年制定,后被ISO 年制定 国际标准化组织)接受为标准,故也称为ISO C。 (国际标准化组织)接受为标准,故也称为ISO C。 目标:为各种操作系统上的C 目标:为各种操作系统上的C程序提供可移植性保 证。 该标准不仅定义了C的语法和语义, 该标准不仅定义了C的语法和语义,而且还定义了 一个标准库。该库可根据头文件划分为15个部分: 15个部分 一个标准库。该库可根据头文件划分为15个部分: 字符类型<ctype.h> 错误码<errno.h> <ctype.h>、 <errno.h>、 字符类型<ctype.h>、错误码<errno.h>、浮点常 <float.h>、数学常数<math.h> <math.h>、 数 <float.h>、数学常数<math.h>、标准定义 <stddef.h>、标准I/O<stdio.h> I/O<stdio.h>、 <stddef.h>、标准I/O<stdio.h>、工具函数 <stdlib.h>、字符串操作<string.h> <string.h>、 <stdlib.h>、字符串操作<string.h>、时间和日 <time.h>、可变参数表<stdarg.h> <stdarg.h>、 期<time.h>、可变参数表<stdarg.h>、信号 <signal.h>等 <signal.h>等。
@2003年 余晓制作 版权所有
2. makefile文件 文件
– 一个文本形式的数据库,make工具借 一个文本形式的数据库,make工具借 助于其完成并自动维护编译工作的文 该文件按照某种语法进行编写, 件,该文件按照某种语法进行编写, 说明了如何编译各个源文件并连接生 成可执行文件, 成可执行文件,定义了源文件之间的 依赖关系。 依赖关系。 – makefile文件的命名 makefile文件的命名
@2003年 余晓制作 版权所有

变量
– – – – – 定义方法: 定义方法:变量名=文本串 引用方法: 引用方法:$(变量名) 示例 预定义变量 环境变量
@2003年
余晓制作
版权所有
行1 OBJS = editor.o screen.o keyboard.o 行2 HDRS = editor.h keyboard.h screen.h 行3 editor : $(OBJS) 行4 gcc -o editor $(OBJS) 行5 editor.o : editor.c $(HDRS) gcc -c editor.c 行6 行7 screen.o : screen.c screen.h 行8 gcc -c screen.c 行9 keyboard.o : keyboard.c keyboard.h gcc -c keyboard.c 行10 行11 .PHONY : clean 行12 clean : rm editor $(OBJS) 行13
– POSIX、SVID、XPG余晓制作 POSIX@2003年 、 、SVID ……
版权所有
2. 函数库和系统调用
– glibc
GNU的C函数库,Linux上最重要的函 的 函数库 函数库, 上最重要的函 数库,定义了ISO C标准指定的所有的 数库,定义了 标准指定的所有的 库函数,以及由POSIX或其他 或其他UNIX操 库函数,以及由 或其他 操 作系统变种指定的附加特色, 作系统变种指定的附加特色,还包括与 GNU系统相关的扩展。 系统相关的扩展。 系统相关的扩展
– 头文件
/usr/include:系统头文件 : /usr/local/include:本地头文件 :
@2003年 余晓制作 版权所有
UNIX中的编译器 第二节 UNIX中的编译器
• cc命令 命令 • gcc命令 命令
– GNU的C和C++编译器,可同时编译 的 和 编译器, 编译器 并连接两个或少数几个C和 并连接两个或少数几个 和C++源程 源程 序(通过源文件的后缀名来判断是 C 程序还是C++程序)。 程序)。 程序还是 程序
余晓制作 版权所有
$ gcc -o factorial main.c factorial.c
@2003年
gcc的常用选项 gcc的常用选项
选项 解释 只编译并生成目标文件。 -c 只编译并生成目标文件。 以字符串“ 定义 -DMACRO 以字符串“1”定义 MACRO 宏。 以字符串“DEFN”定义 -DMACRO=DEFN 以字符串“DEFN 定义 MACRO 宏。 生成调试信息。 -g 生成调试信息。 指定额外的头文件搜索路径DIRECTORY DIRECTORY。 -IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。 指定额外的函数库搜索路径DIRECTORY DIRECTORY。 -LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。 连接时搜索指定的函数库LIBRARY LIBRARY。 -lLIBRARY 连接时搜索指定的函数库LIBRARY。 生成指定的输出文件。 -o FILE 生成指定的输出文件。 生成共享目标文件。通常用在建立共享库时。 -shared 生成共享目标文件。通常用在建立共享库时。 禁止使用共享连接。 -static 禁止使用共享连接。 宏的定义。 -UMACRO 取消对 MACRO 宏的定义。
相关主题