收藏 分享(赏)

UNIX开发基础.ppt

上传人:hwpkd79526 文档编号:10209528 上传时间:2019-10-20 格式:PPT 页数:38 大小:142KB
下载 相关 举报
UNIX开发基础.ppt_第1页
第1页 / 共38页
UNIX开发基础.ppt_第2页
第2页 / 共38页
UNIX开发基础.ppt_第3页
第3页 / 共38页
UNIX开发基础.ppt_第4页
第4页 / 共38页
UNIX开发基础.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、UNIX开发基础,韦安健 2003年2月27日,UNIX开发基础,UNIX下的编译器 编译器概述 编译器的使用 举例 make和makefile 常用的调试工具 CVS的使用 需要学习的一些内容,编译器概述,UNIX下使用编译器来生成目标文件或可执行文件。编译器和平台是相关连的,不同的平台,其编译器是不一样的,编译器生成的目标文件和可执行文件也是不一样的,但一些基本的使用方法确大同小异。各平台下的C编译器和C+编译器如下表:,编译器的使用(一),各编译器的具体使用方法可以通过man命令查看各平台提供的帮助手册。下面以cc编译器为例说明编译器的一些基本使用方法。 使用cc编译器的命令格式如下:

2、cc option. file. option. cc为编译命令,file为所要编译的程序文件,option为编译选项。每个选项以“-”开头,多个选项之间用空格分开,下面是一些常用的编译选项:,编译器的使用(二),-c:编译源文件,但不进行链接,对于每一源文件都相对应地输出一目标文件,可以用-o选项制定输出的目标文件名。 -o:指定输出文件的名字,可以是可执行文件名,也可以是目标文件名。在编译生成可执行文件时,如果没有改选项,则编译器输出的默认的可执行文件名为:a.out。 -Dmacro:定义宏macro,并且宏macro的值为“1”。 -Dmacro=val:定义宏macro,其值为“va

3、l”。 -Umacro:取消宏macro的定义,该选项在-D选项之后处理 -llibname:在链接时使用名为libname的库。编译器会在链接时搜索标准的库目录和在选项中指定的库目录,寻找名为liblibname.a或liblibname.so的文件进行链接。 -Llibpath:增加搜索库文件的目录列表。 -Ipath:增加搜索include文件的目录列表。 -g:生成调试信息。,举例,编译的过程 环境变量的设置 程序的运行,UNIX开发基础,UNIX下的编译器 make和makefile make的使用 makefile的编写 举例 常用的调试工具 CVS的使用 需要学习的一些内容,ma

4、ke的使用,在UNIX下,人们通常利用 make 工具来自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。 make 工具通过一个称为 makefile 的文件来完成并自动维护编译工作。makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。 使用make工具只需要键入“make”命令即

5、可。当make命令执行时,它会在当前目录下搜索文件名为“makefile”或“Makefile”的文件。如果不想make自动搜索缺省文件,可以在命令中使用“-f”选项来指定文件。 使用make的常用命令格式如下: make -f makefileoptionsmacro definifionstargets,makefile的编写,makefile是make的规则描述脚本,它描述生成什么文件集,并怎样生成。makefile文件中注释行以“#”开头,其他行都是描述make规则的控制行。当一行写不下的时候,可以使用续行符“”转入下一行。makefile中允许四种类型的行: 目标行 命令行 宏定义行

6、 伪指令行。,makefile的编写-目标行(一),目标行告诉make建立什么,规则为: 目标名表: 依赖性表 目标名表可以包含多个目标的名字,一般情况下只列出一个目标名,目标名列表不能为空;依赖性表指出目标和哪些文件、目标具有依赖关系,依赖性表可以为空,表示该目标没有其它依赖关系。 make执行时,按依赖深度优先顺序扫描处理遇到的目标。即当前目标的依赖表中有其他目标名,则立刻去扫描该目标,直到当前目标依赖表中的目标都扫描过后,才确定当前目标是否需要重新生成。如果有比当前目标更新的依赖目标,或依赖的目标不存在,则必须生成相关目标。注意依赖表为空,则总是生成目标。如果目标依赖的文件或目标名比当前

7、目标旧,则不生成目标。目标行的后续行一般是以Tab开始的行指出目标的生成规则,即命令行。如: testObj.o: testObj.c testObj.hcc -c testObj.c,makefile的编写-目标行(二),使用后缀规则的目标 make有自己规定的通用目标,也就是后缀规则。后缀规则是一次性告诉make如何建立某些类型目标。后缀规则有两种:双后缀规则和单后缀规则。 双后缀规则描述的是如何由第一个后缀类型的文件生成第二个后缀类型的文件。例如:.c.o规则描述如何由.c文件生成.o文件。如可定义如下的双后缀规则的目标: .c.o:cc -c $ 单后缀规则描述了怎样由指定后缀的文件生

8、成由它基名为名字的文件。例如使用单后缀规则.c,可以由test.c生成test文件。在单后缀规则中,事实上第二个后缀是空。,makefile的编写-目标行(三),特殊的目标 make提供了几个特殊目标来设置make的行为,常用的一个特殊目标: .SUFFIXES:它为make指定新的后缀规则,新的后缀规则是作为.SUFFIXES的依赖表来给出的。 习惯上的目标名 在makefile中有一些常用目标名,它们通常不是文件,称为信息目标。 最常用的一个是clean,命令make clean通常删除所有的建立文件,它们常常是一些应用程序和目标文件。 对于makefiles建立和安装软件,常用的目标是i

9、nstall命令,make install通常用来创建程序,安装联机和把程序拷到指定地方。 另一个常用目标是all,当makefile建立几个目标时,make all一般建立所有的目标。,makefile的编写-命令行,命令行用来定义生成目标的动作,简单的说就是shell命令行。以TAB制表符开始的行即命令行;目标行中,在分号“;”后面的任何文字都被认为是一个命令。 在命令行中可以使用宏,make会在分析时自动替换;可以在命令行后使用“#”字符开头的注释。 一般情况下,命令行中的命令会在make执行的过程中在标准输出中回显出来,除非在该命令前有“”字符,或使用了“.SILENT”特殊目标,或在

10、make命令行中指定了“-S”的选项。,makefile的编写-宏定义行(一),在makefile中,宏的作用类似shell中的宏。使用宏可以减少用户的输入。makefile中的宏定义可以通过四个渠道获取,它们的处理顺序可以通过命令行选项来改变: make内部缺省的宏 环境变量定义的宏 makefile中定义的宏 make命令行中定义的宏 在makefile中定义宏的规则为: name = value 可以使用“$”字符和“()”或“”来引用宏。例如:$(MACRO)、$MACRO,它们都可以引用宏MACRO的值,当宏MACRO的名字只有一个字符时,还可以把“()”或“”省略掉。如果需要在ma

11、kefile使用“$”字符,可以再使用一个“$”字符来转义。,makefile的编写-宏定义行(二),宏替换 make可以支持简单的宏替换功能,它提供了一种机制,临时替换宏值中各入口的后缀,对该宏的使用规则为: $(宏名:原来的后缀=新的后缀) 例如宏SRC_C的定义如下: SRC_C= /common/mppsocket.C mptuman.C 下面我们希望直接得到所有相同基名的.o文件,就可以用: OBJ_C = $(SRC_C:.C=.o) 特殊的宏 为简单使用规则,make提供了几个特殊的宏。常用的有: $:整个当前目标名的值可以由宏“$”来代替。 $:当前的源文件由“$”来代替。 $

12、*:当前目标的基名由宏“$*”来代替。 有些make在这些特殊宏中可以加F和D来处理目标的不同部分。F表示目标中有关文件名的部分。D表示目标中路径的部分。,makefile的编写-伪指令行,makefile大部分由目标行、命令行和宏定义行组成。伪指令行没有标准化,因此不同版本、不同平台的make,其支持的伪指令集是不同的。常用的伪指令有“include”和“#”。 “include”用来在makefile中包含另外一个已定义的文件,规则为: include 文件名 也可以在make命令行中使用多个“-f”选项来实现多个makefile文件的使用。 “#”指出其后的文字为注释。,举例,make命

13、令的使用 一个较简单的makefile 一个较复杂的makefile,UNIX开发基础,UNIX下的编译器 make和makefile 常用的调试工具 添加调试信息 dbx的使用 purify的使用 举例 CVS的使用 需要学习的一些内容,添加调试信息,输出的调试信息有两种形式: 输出到终端的信息:使用printf,将调试程序中需要的信息输出到终端上,这是最简单的调试方法。 输出到日志的信息:有些调试信息不方便使用printf打印出来,还可以将这些信息输出到日志文件中。一般在项目中,都封装了统一的日志操作函数。 对调试信息进行控制: 使用预编译条件:在使用printf的语句之前加入预编译条件,

14、如: #ifdef _DEBUG_printf(“调试信息”); #endif 使用日志开关:在封装的日志操作函数中,一般都有一个控制是否写入日志的开关,dbx的使用(一),dbx是一种源码级的调试工具,通过dbx提供的命令可以象在IDE中一样调试我们编写的程序。 要使用dbx调试程序必须在编译生成可执行程序的时候加上调试信息,即使用编译器的“-g”选项,这样在使用dbx调试时才可以按照源码进行跟踪调试。我们通常使用dbx进行如下的调试工作: 调试一个新的应用程序,运行并跟踪程序 调试core文件,分析core文件产生的原因 调试正在运行的一个程序,跟踪分析当前程序运行的情况 使用dbx的命令

15、格式如下: dbx options progname corefile options为任选项,常用的选项有: -I path: 指定在path目录下搜索源程序文件 -pid pid: 在调试正在运行的程序时,用来指定相对应的进程号 progname为要调试的程序名,可以包括路径(绝对路径或相对路径) corefile为要调试的core文件名,可以包括路径(绝对路径或相对路径),dbx的使用(二),在进入dbx以后,就可以使用交互地使用dbx命令来调试程序了,常用的dbx命令有: help command: 不带参数时,显示dbx的所有命令;指定参数时显示指定命令的帮助信息。 quit: 推出

16、dbx。 file filename: 当该命令没有参数时,显示当前调试的程序文件名;当指定参数时,指定当前调试程序的源程序文件为filename,可以在filename中使用路径。 list para: 列出源代码的若干行。如果不指定参数,则列出当前行以下的若干行;如果参数为“n1”,则列出从行号为n1后的若干行;如果参数为“n1:n2”,则列出从行号为n1后的n2行;如果参数为“n1,n2”,则列出行号为n1到行号为n2之间的行。 /string: 从当前行开始在源代码中向下查找string字符串,就象vi中的一样。查找到后,改变当前行为查找到的行。 ?string: 从当前行开始在源代码

17、中向上查找string字符串,就象vi中的一样。查找到后,改变当前行为查找到的行。,dbx的使用(三),run args: 执行被调试的程序(在遇到断点时停止,或接收到C)。参数args将传递给执行程序,相当于执行程序的命令行参数。 stop at line if exp: 在行号line所在语句处设置断点。参数if exp是条件控制,即当exp为真时,才设置断点。 stop in proc if exp: 在进入子程序procname()后设置断点。条件控制的使用与stop at相同。 assign var=value: 给程序中的变量赋值。 print var: 显示变量或表达式的值。 c

18、ont to line|in proc: 从当前的停止处继续执行程序。当使用参数时,表示继续执行到指定的子程序或者行号处。 goto n: 转移到指定的行。 next n: 向下执行一条(或n条)语句。注意next不进入子程序中,把子程序当成一条语句。 step n: 向下执行一条(或n条)语句。注意step跟踪进入子程序中。,举例-dbx的使用,运行并调试一程序 调试core文件 调试正在运行的程序,purify的使用,purify是Rational公司的一个产品,它是C/C+程序调试时查看存储器使用的工具。通过用Purify连接工具连接,可在程序运行的时候发现各类内存错误和内存泄漏问题(如

19、超过数组边界的读写操作、使用已释放内存、没有释放内存等)。purify会给出详细的报告,通过该报告可以精确地定位有内存错误/泄漏的源代码行数。 使用purify的命令格式如下: purify -option . compileCommand option为purify的任选项 compileCommand为C/C+的编译命令 注意一点:使用purify必须在图形终端下,我们通常在windows下使用Exceed或者Xwin来模拟UNIX下的图形终端。,举例-purify的使用,Exceed的配置、使用 purify的使用,UNIX开发基础,UNIX下的编译器 make和makefile 常用的

20、调试工具 CVS的使用 CVS简介 基本概念说明 基本命令使用说明 举例 需要学习的一些内容,CVS简介,CVS(Concurrent Versions System,并发版本管理系统)是开发软件过程中的一种版本控制的工具。该工具主要应用于UNIX环境下,适合一个软件开发小组在进行项目开发的时候管理源程序和文档。由于CVS系统是一种Client/Server结构,在Server处存有源代码的副本和历史纪录,Client端的程序员可以很方便的存取最新版本的源码或某个时间点的源码,这样既节省了空间,也消除了原有的手工保存的缺点。同时它可以在多人开发的环境下避免多人同时修改同一个文件,还可以提供版本

21、合并的功能。,基本概念说明(一),源代码库(Repository) CVS存储所有修订版本历史纪录的最主要的副本。每一个项目都有一个确定的源代码库 工作拷贝(Working copy) 开发者对文件作出修改时文件所在的拷贝。一个给定的项目可能有多个工作拷贝,每一个开发者都有自己的拷贝,开发者将源代码库的副本checkout出来后建立自己的工作拷贝,然后所有的对于源码的修改操作都基于该工作拷贝。 粘性(stick) 是指由于工作拷贝不是最新的版本,因此不允许进行commit操作。 修订版本(Revision) 文件历史记录中的被开发者提交的变化。一个修订版本就是一个经常变化的项目的smapsho

22、t(瞬态图)。,基本概念说明(二),导出(Check out) 从源代码库中申请一份工作拷贝。该工作拷贝反映的是取出拷贝时项目的瞬时状态。 提交(Commit) 将工作拷贝中的变化输入源代码库; 更新(Update) 从源代码库中取出别人的修改数据,更新自己的工作拷贝,并显示自己的工作拷贝是否有未提交的变化。注意,不要和commit(提交)混淆,更新和提交是一对互补的指令。一般来说,第一次将源码导出到工作拷贝的时候使用checkout,而以后需要更新的时候使用update。,基本命令使用说明(一),login 命令格式:cvs login 功能说明:登陆命令,和CVS服务器相连,证实验证信息。

23、 logout 命令格式:cvs logout 功能说明:退出登陆命令。 checkout 命令格式:cvs checkout options projects 缩写:co 功能说明:将一个模块从源代码库检查并导出到一个工作拷贝中。如果工作拷贝不存在,就新创建一个;如果存在就升级更新。 常用选项说明: -D DATE -导出不迟于DATE的最新版本,该选项有粘性。 -d DIR -在名为DIR的目录创建一个工作拷贝。 -P -从工作拷贝中删除空目录 -r tag -按照指定的tag导出相应的副本,有粘性。,基本命令使用说明(二),commit 命令格式:cvs commit files 缩写:

24、ci 功能说明:从一个工作拷贝向源代码库提交修改,如果在某个工作拷贝目录下运行该命令,不加文件名,表示提交该目录和其子目录下的所有文件。 update 命令格式:cvs update options files 缩写:up 功能说明:将源代码库的修改合并到你的工作拷贝。如果在某个工作拷贝目录下运行该命令,不加文件名,表示更新该目录和其子目录下的所有文件。 常用选项说明: -D -升级到不晚于DATE的最新版本。有粘性。 -d -获得缺少的目录,如果源代码库中的目录不在工作拷贝中,需要改选项才可以将新目录导出。 -P -去掉空目录,在升级更新结束的时候将不含有文件的目录从工作拷贝中删除。 -r

25、REV -升级更新到版本REV,有粘性。,基本命令使用说明(三),diff 命令格式:cvs diff options files 功能说明:显示两个版本之间的差别。当没有选项时,CVS将源代码库基础(最新)版本和工作拷贝的内容进行比较。 常用选项说明: -D DATE -比较不迟于DATE的最新版本。 -r REV1 -比较工作拷贝和REV1版本的差异。 r REV1 r REV2 -比较REV1版本和REV2版本的差异。 status 命令格式:cvs status options files 功能说明:显示工作拷贝中的文件的状态,如果在某个工作拷贝目录下运行该命令,不加文件名,表示显示该

26、目录和其子目录下的所有文件的信息。 常用选项说明: -v -显示文件的标签信息,基本命令使用说明(五),watch 命令格式:cvs watch on|off|addremove files 功能说明:设置对于一个或多个文件的监视。 子命令说明: on:声明文件正在监视中。这意味着文件在导出的时候是只读的。 off:取消监视。 add:将用户加到文件的监视者名单中。 remove:将用户从监视者名单中删除。 watchers 命令格式:cvs watchers files 功能说明:显示谁正在监视哪些文件。,基本命令使用说明(六),add 命令格式:cvs add files 缩写:ad 功能

27、说明:向一个已经存在的项目中增加一个或几个新的文件。注意,利用该命令增加了文件后,必须运行commit提交该文件才生效。 remove 命令格式:cvs remove files 缩写:rm 功能说明:将一个文件从一个项目中删除。注意,利用该命令删除了文件后,必须运行commit提交才生效。,举例,环境变量的设置 CVS一些常用命令的使用,UNIX开发基础,UNIX下的编译器 make和makefile 常用的调试工具 CVS的使用 需要学习的一些内容,需要学习的一些内容,UNIX下的shell编程 C/C+的基础知识,一些常用函数的使用,如字符串处理的函数、时间处理函数 UNIX进程间通信,熟悉管道、消息队列、共享内存、套接字的使用 数据库编程 与项目相关的系统程序,问 题?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报