LINUX环境高级编程(三)_第1页
LINUX环境高级编程(三)_第2页
LINUX环境高级编程(三)_第3页
LINUX环境高级编程(三)_第4页
LINUX环境高级编程(三)_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、LINUX环境高级编程中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 朱静朱静中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院LINUX下下C编程概述编程概述v程序安装目录程序安装目录/usr/local /usr/bin /usr/local/binv编程语言编程语言C C+ Java JavaScriptPerl Python PHP .(LP P4 表1-1)中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院LINUX下下C编程概述编程概述v头文件目录头文件目录/usr/include /us

2、r/include/sys(linux)v库文件目录库文件目录/lib /usr/lib*.a *.sovGCC是是GNU项目的编译组件之一项目的编译组件之一GCC编译器能将C,C+源程序,汇编程序和目标程序编译链接成为可执行文件。v四个编译步骤四个编译步骤预处理(也叫预编译,preprocessing)编译(compliling)汇编(assembling)链接(linking)中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院GCC编译器编译器GCC编译器编译器vGCC的基本用法和选项的基本用法和选项 一般格式:gcc options filenames 例:gcc o hell

3、o hello.cOptions选项:-c-o-O-On-g,-ggdb-shared-static-thread中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院vGCC编译过程中的文件类型编译过程中的文件类型*.c C语言源代码文件*.a 由目标文件构成的档案库文件 *.C,*.cc,*.cxx C+源代码文件*.h 程序所包含的头文件*.i 已经预处理过的C源代码文件*.ii 已经预处理过的C+源代码文件*.m Objective-C源代码文件 *.o 编译后的目标文件*.s 汇编语言源代码文件*.S 经过预编译的汇编语言源代码文件中国地质大学(武汉)计算机学院中国地质大学(武

4、汉)计算机学院GCC编译器编译器vGCC 警告提示功能警告提示功能gcc pedantic hello.c o hello 发现一些不符合发现一些不符合ANSI/ISO C标准的代码标准的代码 gcc Wall hello.c o hello 产生尽可能多的警告产生尽可能多的警告 库依赖gcc hell.c I/home/include o hellogcc -o fred fred.c -lmgcc -o fred fred.c /usr/lib/libm.a 代码优化gcc On hello.c o hello中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院GCC编译器编译器v

5、GCC的版本的版本 $gcc v 或 $gcc -version 查看gcc的版本,内核不同,可能gcc的版本不同 GCC是一组编译工具的总称C编译器 cc, ccl, ccplus, gccC+编译器 c+, ccplus, g+源码预处理器 cpp, cpp0库文件 libgcc.a, libgcc_eh.a, libgcc_s.so 帮助man gcc 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院GCC编译器编译器例:hello.c#include int main(int argc,char *argv)Printf(“Hello,linux!n”);编译:gcc o

6、hello hello.c运行:./hello中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院GCC编译器编译器例:创建一个小型静态函数库,其中包含两个函数,并在一个例程中调用函数。(LP P9 静态库)中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院GCC编译器编译器vIDE开发环境开发环境IDE是一个图形化集成开发环境,将创建、调试、运行应用程序的部分或所有工具集成到一起。一般会包含一个编辑器,一个文件浏览器和一种运行应用程序并捕获其输出的方法。 Kdevelop Eclipse Anjuta Netbeans Qt SlickEdit Code:Blocks中国地

7、质大学(武汉)计算机学院中国地质大学(武汉)计算机学院开发工具开发工具v命令行工具命令行工具 源代码控制源代码控制中大型团队项目开发中,通过源代码控制,避免项目组多个开发人员文件修改的冲突,跟踪管理对源文件进行的修改。 SCCS:已基本被RCS取代。RCS: 源代码版本管理工具, 通过RCS文件进行源文件管理。跟踪并记录源文件的每一次改动。通过这个记录文件,可以重建出任何一个以前的版本。RCS只保存文件版本间的不同之处,节省存储空间。RCS通常以.v为后缀。不支持并发访问(互斥访问)。( lock-modify-unlock )中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院开发工

8、具开发工具v命令行工具命令行工具 源代码控制源代码控制CVS:(Current Version Control)并发版本控制系统;CVS在进行源代码管理时的特点:源代码空间与用户空间分离并发访问(Copy-Modify-Merge)源文件共享独立的工作环境CVS使用手册:http:/ CVS 替代版;中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院开发工具开发工具v命令行工具命令行工具 发行软件发行软件patchtarv软件包管理工具软件包管理工具 rpm dpkg Alien-rpm和和dpkg之间的格式转换工具之间的格式转换工具v编写手册页编写手册页 手册页格式手册页格式 手册

9、页生成手册页生成groff 手册页安装手册页安装中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院开发工具开发工具v工程管理器工程管理器Makefile规定整个工程(规定整个工程(project)的编译规则。)的编译规则。一个工程中的源文件不计其数,按类型,功能,模块分别放在不同的目录中,Makefile通过定义一系列的规则来实现“自动化编译”。一旦写好Makefile,只需要一个make命令,就能完成整个工程的编译。中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 make命令命令功能:功能:查找当前目录下的makefile文件;初始化文件中的变量;分析makefile

10、中的所有规则;为所有的目标文件创建依赖关系;根据依赖关系,决定哪些目标文件要重新生成;执行生成命令;特点:特点:提高工作效率,便于大型项目的开发。中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 make命令的语法命令的语法make 参数 宏定义 目标文件参数:参数:-k make过程中发现错误时执行仍然继续-n 只输出要执行的操作步骤而不真正执行这些步骤-f 或-file 指定make要执行的makefile文件名-w make时修改了目录则打印信息-d 打印调试信息-I 指定makefile文件的目录-h help中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 一

11、个实例:一个实例:/*main.c*/#include mytool1.h #include mytool2.h int main(int argc,char *argv) mytool1_print(hello); mytool2_print(hello); 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 一个实例:一个实例:/*mytool1.c*/#include mytool1.h void mytool1_print(char *print_str) printf(This is mytool1 print %sn,print_str); /*mytool2.c*/#i

12、nclude mytool2.h void mytool2_print(char *print_str) printf(This is mytool2 print %sn,print_str); 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院/*mytool1.h*/#ifndef _MYTOOL_1_H #define _MYTOOL_1_H void mytool1_print(char *print_str); #endif /*mytool2.h*/#ifndef _MYTOOL_2_H #define _MYTOOL_2_H void mytool2_print(cha

13、r *print_str); #endif 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院#makefile文件main:main.o mytool1.o mytool2.o main:main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytool2.o main.o:main.c mytool1.h mytool2.h main.o:main.c mytool1.h mytool2.h gcc -c main.c gcc -c main.c

14、 mytool1.o:mytool1.c mytool1.h mytool1.o:mytool1.c mytool1.h gcc -c mytool1.c gcc -c mytool1.c mytool2.o:mytool2.c mytool2.h mytool2.o:mytool2.c mytool2.h gcc -c mytool2.cgcc -c mytool2.c将前述所有文件放到同一个文件夹中,执行make命令,则生成可执行文件main。$make 执行makefile文件$./main 运行main程序中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院make的工作过程m

15、ain.cmytool1.hmytool2.hmytool1.cmytool1.hmytool2.cmytool2.hmain.omytool1.omytool2.omain中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院make的工作过程1. make会在当前目录下找名字为“makefile”的文件2.如果找到,它会找文件中的第一个目标文件(如main),并把这个文件做为最终的目标文件。 3. 如果目标文件不存在,或者目标所依赖的文件的修改时间比目标文件新,make就会执行后面所定义的规则来生成目标文件。4. 如果目标和目标依赖的文件都存在,且修改时间最新,则根据依赖文件的依赖关

16、系和文件修改时间决定是否按规则生成依赖文件,以此类推。5. 如果所有文件都找到,make先生成中间依赖文件(例如.o文件),再用依赖文件生成最终的目标文件。中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 Makefile的文件名 make默认会在当前目录下按顺序寻找文件名为:GNUmakefile,makefile,Makefile的文件,找到后解释执行。 最好使用Makefile这个文件名,大多数make都支持makefile和Makefile这两个文件名。 最好不用GNUmakefile。 可以用其它的文件名来充当makefile文件,用make命令的-f或-file参数指定

17、文件。例: $make -f make.linux $make -file Make.AIX 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 Makefile的内容1 显式规则。说明了如何生成一个或多个目标文件。明确指出的要生成的文件,文件的依赖文件,生成的命令等。2 隐含规则。make命令的自动推导自动推导,可以比较简略地书写makefile。3 宏的定义。当makefile被执行时,定义的宏会被扩展到相应的引用位置上去。中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 Makefile的内容4 文件指示。包含了三个部分。一个是在一个Makefile中引用另一个Ma

18、kefile;另一个是指根据某些条件指定Makefile中的有效部分,与C语言中的预编译#if类似;第三包含一个多行的命令。5 注释。Makefile中只有行注释“#”,如果要使用“#”字符,需要用转义字符进行转义:“#”6 特殊字符-:make时忽略所有错误;:执行某些命令时不显示该命令。例如echo说明信息。中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院Makefile的基本语法规则目标文件:依赖文件列表目标文件:依赖文件列表命令列表命令列表例:main:main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytoo

19、l2.o main.o:main.c mytool1.h mytool2.h gcc -c main.c mytool1.o:mytool1.c mytool1.h gcc -c mytool1.c mytool2.o:mytool2.c mytool2.h gcc -c mytool2.c中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院Makefile的宏定义例:OBJ = main.o mytool1.o mytool2.o CC = gccmain:$(OBJ)$(CC) -o main $(OBJ) main.o:main.c mytool1.h mytool2.h $(C

20、C) -c main.c mytool1.o:mytool1.c mytool1.h $(CC) -c mytool1.c mytool2.o:mytool2.c mytool2.h $(CC) -c mytool2.c中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院make的自动推导(隐含规则,内置规则)make命令只要发现一个.o文件,就会自动地把.c文件加在依赖关系中。如果make找到一个whatever.o,那么whatever.c就会是whatever.o的依赖文件。并且生成规则默认为cc c whatever.o whatever.c。 make -p 打印所有make

21、命令的自动推导规则中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院make的自动推导例:OBJ= main.o mytool1.o mytool2.o CC=gccmain:$(OBJ)$(CC) -o main $(OBJ) main.o: mytool1.h mytool2.h mytool1.o: mytool1.h mytool2.o: mytool2.h 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 模式规则模式规则模式规则可以自定义一个隐含规则。模式规则可以自定义一个隐含规则。模式规则中目标的定义要有“%”字符,用来表示一个或多个任意字符。依赖目标的定义

22、中也可以使用“%”,但依赖目标中的“%”的取值,取决于其目标。 说明:“%”的展开发生在变量和函数的展开之后,变量和函数的展开发生在make载入Makefile时,而模式规则中的“%”则发生在执行make时。 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 模式规则模式规则例:例:CC=gccCC=gccCFLAGS=CFLAGS=CPPFLAGS=CPPFLAGS= %.o%.o : : %.c %.c $(CC)$(CC) -c-c $(CFLAGS)$(CFLAGS) $(CPPFLAGS)$(CPPFLAGS) $ -o-o $ 这个例子表示了这个例子表示了,把所有的把所

23、有的.c文件都编译成文件都编译成.o文件文件。 其中,其中,$表示当前所有目标,表示当前所有目标,$表示当前所有表示当前所有依赖文件。这些变量叫依赖文件。这些变量叫自动化变量自动化变量。 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 模式规则模式规则-自动化变量(内置宏)自动化变量(内置宏)$?当前目标依赖的文件列表中比当前目标新的文件$当前所有目标名$当前所有依赖文件名$*不含后缀名的当前依赖文件名 (LP P323表9-1)中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 引用其他的引用其他的Makefile文件文件在一个Makefile文件中,可以使用incl

24、ude 关键字把别的Makefile包含进来。被包含的文件会原样插入到被包含的位置上。引用格式: include 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 文件搜寻文件搜寻在一些大的工程中,有大量的源文件,通常的做法是把源文件分类,放在不同的目录中。当make需要去找寻文件的依赖关系时,可以在文件前加上路径 。lMakefile文件中的特殊变量VPATH VPATH = src:./headers 指定两个目录,“src”和“./headers”,make会按照这个顺序进行搜索。 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 文件搜寻文件搜寻lmake的“v

25、path”关键字 三种使用方法:三种使用方法: 1、vpath 为符合模式的文件指定搜索目录。 2、vpath 清除符合模式的文件的搜索目录。 3、vpath 清除所有已被设置好了的文件搜索目录。中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 文件搜寻文件搜寻lmake的“vpath”关键字 需要包含“%”字符。“%”表示匹配零或若干字符。例:%.h 表示所有以“.h”结尾的文件。例:vpath %.h ./headers 表示要求make在“./headers”目录下搜索所有以“.h”结尾的文件。(如果某文件在当前目录没有找到的话) vpath %.c foo:bar vpat

26、h %.c blish 连续使用vpath中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 伪目标伪目标如果Makefile需要一次生成若干个可执行文件,可以使用“伪目标”例: all : prog1 prog2 prog3.PHONY : all prog1 : prog1.o utils.o cc -o prog1 prog1.o utils.o prog2 : prog2.o cc -o prog2 prog2.o prog3 : prog3.o sort.o utils.o cc -o prog3 prog3.o sort.o utils.o中国地质大学(武汉)计算机学院中

27、国地质大学(武汉)计算机学院 伪目标伪目标lMakefile中的第一个目标会被作为其默认目标。l“.PHONY : all”声明了“all”这个目标为“伪目标”。其依赖于其它三个目标。l伪目标的特性是,总是被执行的,所以其依赖的那三个目标就总是不如“all”这个目标新。所以,其它三个目标的规则总是会被编译。也就达到了一口气生成多个目标文件的目的。中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 伪目标伪目标例:OBJ= main.o mytool1.o mytool2.o CC=gccmain:$OBJ$CC -o main $OBJ main.o:main.c mytool1.h

28、 mytool2.h $CC -c main.c mytool1.o:mytool1.c mytool1.h $CC -c mytool1.c mytool2.o:mytool2.c mytool2.h $CC -c mytool2.cclean: rm *.o temp 编译过程中生成了许多中间文件,定义一个清除它们的“目标”以备完整地重编译而用。 (clean这个伪目标后没有给出依赖关系的文件,因此不会被执行。执行make clean来使用该目标。) clean这个“伪目标”并不是一个文件,只是一个标签 (lable)。中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 多目标(

29、多个目标同时依赖于一个文件,并且多目标(多个目标同时依赖于一个文件,并且其生成的命令大体类似)其生成的命令大体类似) 例:bigoutput littleoutput : text.g generate text.g -$(subst output,$) $ 上述规则等价于:bigoutput : text.g generate text.g -big bigoutputlittleoutput : text.g generate text.g -little littleoutput 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 显示命令显示命令 make会把其要执行的命令行

30、在命令执行前输出到屏幕上。用“”字符在命令行前,这个命令将不被显示。如果make执行时,带参数“-n”或“-just-print”,那么只显示命令,不执行命令。make参数“-s”或“-slient”,全面禁止命令的显示。例: echo 正在编译XXX模块. 当make执行时,会输出“正在编译XXX模块.”字串,但不会输出命令,如果没有“”,那么,make将输出: echo 正在编译XXX模块. 正在编译XXX模块.中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 函数函数 函数的调用语法函数的调用语法函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $( )或是 $

31、例:comma= ,empty=space= $(empty) foo= a b cbar= $(subst $(space),$(comma),$(foo)subst函数把$(foo)中的空格替换成逗号,所以$(bar)的值是“a,b,c”。 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 函数函数 字符串处理函数:字符串处理函数:字符串替换函数字符串替换函数 $(subst ,) 模式字符串替换函数模式字符串替换函数 $(patsubst ,) 去空格函数去空格函数 $(strip )查找字符串函数查找字符串函数 $(findstring ,)文件操作函数文件操作函数 :取目

32、录函数取目录函数 $(dir ) 取文件函数取文件函数 $(notdir ) 取后缀函数取后缀函数 $(suffix ) foreach函数函数$(foreach ,) if 函数函数 call函数函数中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 make的退出码的退出码 make命令执行后有三个退出码: 0 表示成功执行。1 如果make运行时出现任何错误,其返回1。2 如果使用了make的“-q”选项,并且make使得一些目标不需要更新,那么返回2。-q make操作将根据目标文件是否已更新返回0或非0的状态信息 中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院vGDB是是GNU开源组织发布的一个强大开源组织发布的一个强大的的UNIX下的命令行程序调试工具下的命令行程序调试工具 功能功能l 启动程序l 可以让被调试的程序在指定的断点位置停止l 当程序停住时,可检查发生的事件l 动态地改变程序执行环境 注意:注意: 编译时加上-g或-ggdb选项,并且不使用-On参数进行代码优化,才能使用gdb调试工具。

温馨提示

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

评论

0/150

提交评论