欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第7章 vi与C编程.pdf

    • 资源ID:70013923       资源大小:517.63KB        全文页数:13页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第7章 vi与C编程.pdf

    1信息科学与技术学院信息科学与技术学院网络通信技术实验室网络通信技术实验室 张新有张新有Email:Phone:66365978嵌入式嵌入式Linux系统系统zhangxyCH7:vi与c编程22014/3/16第第7章章 vi与与C编程编程7 7.1 1 文本编辑器文本编辑器VimVim7 7.2 2 GccGcc的使用的使用7 7.3 3 LinuxLinux下函数库下函数库7 7.4 4 MakeMake工程管理器工程管理器7 7.5 5 符号调试器符号调试器gdbgdb7 7.6 6 文件系统程序实例文件系统程序实例(对应教材第对应教材第3 3章章)本章要点本章要点:p53p53zhangxyCH7:vi与c编程32014/3/16Linux系统下文本编辑器的使用情况:zhangxyCH7:vi与c编程42014/3/167.1 vi编辑器编辑器用户在使用计算机时,往往需要建立自己的文件,无论是一般文本文件、数据文件,还是编写的源程序文件,这些工作都离不开编辑器编辑器。Linux系统提供了一个完整的文本编辑器家族系列,如Ed、Ex、vi 和 Emacs等,按功能可以分为两大类:行编行编辑器辑器(Ed、Ex)和全屏幕编辑器和全屏幕编辑器(vi、Emacs)。行编辑器行编辑器每次只能对一行进行操作,使用起来很不方便。而全屏幕编辑器全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,修改的结果可以立即看出来,便于用户学习和使用。zhangxyCH7:vi与c编程52014/3/16vi是Linux系统的第一个全屏幕交互式编辑程序,它从诞生至今一直得到广大用户的青睐,历经数十年仍然是人们主要使用的文本编辑工具,其强大的生命力是其强大的功能及高效率强大的功能及高效率带来的。1、vim简介简介vi是“visual interface”的简称。可执行输出、删除、查找、替换、块操作等众多文本操作。且用户可根据自己的需要对其进行定制,这是其他编辑程序所没有的。vi不是排版程序,它不象Word或WPS可以对字体、格式、段落等其他属性进行编排,不能“所见即所得所见即所得”。它只是一个文本编辑程序文本编辑程序。zhangxyCH7:vi与c编程62014/3/16vi没有菜单,只有命令,且命令繁多。vi有三种基本工作模式:命令模式命令模式、文本输入模式文本输入模式和和末行模式末行模式。1)命令模式命令模式任何时候,只要按一下键,即可使vi进入命命令模式令模式;进入vi编辑器时,默认处于该模式下默认处于该模式下。在该模式下,用户可以输入各种合法的vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释。若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是不是vi的合法命令的合法命令,vi会响铃报警。2zhangxyCH7:vi与c编程72014/3/162)文本输入模式文本输入模式在命令模式下输入插入命令i、附加命令a、打开命令 o、修改命令c、取代命令r 或替换命令s 都可以进入文本输入模式。在该模式下,用户可以输入文件的内容。用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式回到命令模式下,按键即可。zhangxyCH7:vi与c编程82014/3/163)末行模式末行模式在vi中,命令通常是单个键,如i。在命令模式命令模式下,用户按按“:”键即可进入末行模式键即可进入末行模式下,此时vi会在屏幕的最后一行显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,vi自动回到命令模式。可按键,或用退格键将输入的命令全部删除之后,再按一下退格键,即可使vi回到命令模式下。zhangxyCH7:vi与c编程92014/3/16Vi编辑器的三种工作模式之间的转换如下编辑器的三种工作模式之间的转换如下:若要从命令模式转换到编辑模式,键入命令a、o或i;若需要从文本模式返回,按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。zhangxyCH7:vi与c编程102014/3/162、vi的启动和退出的启动和退出1)vi的启动的启动vivi file1vi+file1 定位在最后一行vi+N file1vi+/string file12)vi的退出的退出(即可切换到末行模式即可切换到末行模式):w 或:w filename:wq:x 或:ZZ:q!或:quitzhangxyCH7:vi与c编程112014/3/163、vi命令模式命令模式的基本命令的基本命令(不回显)2)移动光标移动光标h,j,k,l-左、下、上、右Ctrl+b-往前一页Ctrl+f-往后一页G-移到文件最后w-移到下个 word 的开头b-跳至上个 wore 的开头1)插入插入i-光标前插入a-光标后插入o-行下新增一空行I-插于行首A-插于行尾O-行上新增一空行zhangxyCH7:vi与c编程122014/3/163)删除删除x-删除所在位置的一个字符#x-5x 表示删除5 个字符dd-删除光标所在之行#dd-例,5dd 表删除自光标算起之5 行:1,#d-删除行1至行#的文字X-删除所在前面一个字符D-删除至行尾4)更改更改cw-更改光标处之字到此一单字之字尾处c#w-例,c3w表更改 3 个字cc-修改行C-替换到行尾5)取代取代r-取代光标处之字符R-取代字符直到按ESC 为止3zhangxyCH7:vi与c编程132014/3/166)复制复制yw-拷贝光标处之字到字尾至缓冲区P-把缓冲区之资料贴在所在行的后p-把缓冲区之资料贴在所在行的前yy-拷贝光标所在之行至缓冲区#yy-5yy,拷贝光标所在之处以下5行至缓冲区7)复原复原u-undo,复原至上一动作8)跳至指定之行跳至指定之行g-列出行号,及相关信息9)重复上一个命令重复上一个命令zhangxyCH7:vi与c编程142014/3/164、vi的末行模式基本命令的末行模式基本命令使用前请先按ESC 键确定在命令模式下按:或/或?叁键即可进入末行模式。1)列出行号列出行号:set nu2)寻找字串寻找字串/word(由首至尾寻找),按n 可往下继续找?word(由尾至首寻找),按N 可往前继续找3)跳行跳行:100-可跳至第100 行zhangxyCH7:vi与c编程152014/3/164)替换字符串替换字符串:1,$s/pattern1/pattern2/g例例1:从文件第一行至文件尾将大写A全部替换成小写:1,$s/A/a/g为精确查找和替换字符串可加入如下:-匹配行首$-匹配行尾-匹配词尾.-匹配任意字符zhangxyCH7:vi与c编程162014/3/165、编辑多个文件编辑多个文件1)将一个文件插入另一个文件将一个文件插入另一个文件:r filename2)编辑多个文件编辑多个文件vi file1 file2 file3通过:n 文件名 切换本小节实验本小节实验:p86:vi使用练习1.实验目的:2.实验内容:(1)在自己的主目录下建一个名为”vi“的目录。.zhangxyCH7:vi与c编程172014/3/16注注:文本编辑器文本编辑器emacsemacs是是GUN推出的功能强大的文本编辑器推出的功能强大的文本编辑器。它允许同时打开多个文件。键入emacs即可进入,可以直接加上文件名启动该文件编辑。若没有指定文件名emacs会启动一个空文档。进入进入emacs后后,emacs根据终端的大小(一般是80*24)自动调整,分成叁个区域:主窗口主窗口(Window),系统模式系统模式(mode line)及回应区回应区(echo area),后两者将会固定在画面的最底下两行。在每个工作状态emacs都会开一个缓冲区来执行这个工作。Emacs每多开一个文件,多启动一种功能模式(读news、email等)便会多开一个buffer,用户可在各buffer之间自由切换。zhangxyCH7:vi与c编程182014/3/16退出emacs,再按即可。Emacs会询问修改过的文件是否保存,已启动的buffer是否中止。也可用Ctrl-z暂时离开emacs,键入fg再回来。学学emacs推荐使用推荐使用emacs在线上在线上tutorial。下载地址下载地址:http:/ftp.gnu.org/pub/gnu/emacs/emacs-21.3.tar.gzftp:/ftp.gnu.org/pub/gnu/emacs/emacs-21.3.tar.gz下载的emacs包除了含有emacs文本编辑器外,还有其它许多工具,如:b2m-将邮件从RMAIL格式转成UNIX的mbox格式,Ebrowse-使emacs可调用C+的类的层级结构,4zhangxyCH7:vi与c编程192014/3/167.2 Linux下的下的C编程编程gccC是在是在类类UNIX操作系统操作系统中广泛使用的通用编程语言中广泛使用的通用编程语言。主要原因有:它是一种非常通用的语言。在任何一种计算机上都有至少一种能用的C编译器。并且它的语法和函数库在不同的平台上都是统一的。有简洁、灵活,表达能力强、目标代码质量高等特点。C是所有版本的UNIX上的系统语言。89年美国国家标准协会发布了ANSI C的C语言标准。目标是为各种操作系统上的C程序提供可移植性保证。在80年代出现了一种C的面向对象面向对象的扩展:C+。zhangxyCH7:vi与c编程202014/3/161、gcc简介简介Vi是最常用的Linuc下C程序编辑工具。Linux中最重要的软件开发工具是gcc。gcc也是GNU的C和C+编译器。gcc能够编译三种语言:C、C+和和Object C(C语言的一种面向对象扩展,1986由Brad Cox开发,它带有一个丰富的类库,已经被成功用于大型系统的开发)。利用gcc命令可同时编译并连接C和C+源程序。也可对几个C源文件利用gcc编译、连接并生成可执行文件。zhangxyCH7:vi与c编程212014/3/16实例实例有7-1main.c 和和7-1factorial.c两个源文件,现在要编译生成一个计算阶乘计算阶乘的程序(上机作业上机作业,不要不要改变文件名改变文件名)。/*-清单7-1factorial.c-*/#include#include int factorial(int n)if(n=1)return 1;else return factorial(n-1)*n;zhangxyCH7:vi与c编程222014/3/16/*-7-1 main.c-*/#include#include int factorial(int n);int main(int argc,char*argv)int n;if(argc 2)printf(Usage:%s nn,argv 0);return-1;else n=atoi(argv1);printf(Factorial of%d is%d.n,n,factorial(n);return 0;zhangxyCH7:vi与c编程232014/3/16利用如下命令可编译生成可执行文件及执行程序:$gcc-o 7-1factorial 7-1main.c 7-1factorial.c$./7-1factorial 5 Factorial of 5 is 120.gcc编译器能将C、C+语言源程序、汇编序序和目标程序编译、连接成可执行文件,若没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。gcc通过后缀来区别输入文件的类别,下面列出了gcc所遵循的部分约定规则:.c为后缀的文件,C语言源代码文件;zhangxyCH7:vi与c编程242014/3/16.a为后缀的文件,是由目标文件构成的档案库文件;.C,.cc或.cxx为后缀的文件,是C+源代码文件;.h为后缀的文件,是程序所包含的头文件;.i 为后缀的文件,是已经预处理过的C源代码文件;.ii为后缀的文件,是已经预处理过的C+源代码文件;.m为后缀的文件,是Objective-C源代码文件;.o为后缀的文件,是编译后的目标文件;.s为后缀的文件,是汇编语言源代码文件;.S为后缀的文件,是经过预编译的汇编语言源代码文件。5zhangxyCH7:vi与c编程252014/3/16gcc只编译C+源文件,不能自动和C+程序使用的库连接。因此,通常使用使用g+命令来完成命令来完成C+程序的程序的编译和连接编译和连接。该程序会自动调用gcc实现编译。/hello.C#include void main(void)cout Hello,world!endl;调用 g+命令编译、连接并生成可执行文件:$g+-o hello hello.C$./hello Hello,world!zhangxyCH7:vi与c编程262014/3/162、gcc的执行过程的执行过程虽然称gcc是C语言的编译器,使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤预处理预处理(也称预编译也称预编译,Preprocessing)编译编译(Compilation)汇编汇编(Assembly)连接连接(Linking)gcc首先调用首先调用cpp进行预处理进行预处理。在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。zhangxyCH7:vi与c编程272014/3/16 接着调用接着调用cc1进行编译进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的处理步骤汇编过程是针对汇编语言的处理步骤,调用调用as进进行工作行工作,一般来讲,.S或.s为后缀的汇编语言源代码文件汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,gcc就调用就调用ld来完来完成最后的关键性工作成最后的关键性工作:连接连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的函数库中连到合适的地方。zhangxyCH7:vi与c编程282014/3/163、gcc的基本用法和选项的基本用法和选项gcc最基本的语法最基本的语法gcc options filenames参数options:-c 只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-o output_filename,确定输出文件名为output_filename,该名称不能和源文件同名。若不给出这个选项,gcc就生成预设的可执行文件a.out。-g 产生调试工具(GNU的gdb)所必要的调试符号信息,要想对源代码进行调试,必须加入这个选项。zhangxyCH7:vi与c编程292014/3/16-O 对程序进行优化编译、连接,采用该选项,整个源代码会在编译、连接过程中进行优化处理。这样产生的可执行文件的执行效率可以提高。但是,编译、连接的速度就相应地要慢一些。-O2 比-O更好的优化编译、连接。当然整个编译、连接过程会更慢。-O3 比-O2更进一步优化。-I dirname 将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。-L dirname 将dirname所指出的目录加入到程序函数库文件的目录列表中,是在连接过程中使用的参数。zhangxyCH7:vi与c编程302014/3/16-l name 在连接连接时,装载名字为“libname.a”的函数库,该函数库位于系统预设目录或者由-L选项确定的目录下。例如,-l m表示连接名为“libm.a”的数学函数库。-ansi 只支持ANSI标准的C语法。这一选项将禁止GNU C 的某些特色。-D MACRO以字符串“1”定义MACRO宏。-D MACRO=DEFN以字符串“DEFN”定义MACRO宏。-E只运行C预编译器。-m486 针对486进行代码优化。-O0 不进行优化处理。6zhangxyCH7:vi与c编程312014/3/16-shared 生成共享目标文件。通常用在建立共享库时。-static 禁止使用共享连接。-U MACRO 取消对MACRO宏的定义。-w 不生成任何警告信息。-Wall 生成所有警告信息。-S 编译选项告诉gcc在为C代码产生了汇编语言文件后停止编译。例例1:一个程序名为hello.c源代码文件,要生成一个可执行文件,最简单的办法就是$gcc hello.c 预编译、编译连接一次完成,生成a.out可执行文件。zhangxyCH7:vi与c编程322014/3/16还可以加还可以加-c,-o;直接直接-o;-O;-O2等参数等参数;例例2:源程序由两个文件testmain.c 和testsub.c组成,程序中使用了系统提供的数学库数学库,同时希望给出的可执行文件为test,这时的编译命令可以是$gcc testmain.c testsub.c lm-o test 其中,-l m表示连接系统的数学库数学库libm.a。除了gcc 编译器之外,目前还有一个egcs编译器。egcs不是一个全新设计的编译器,而是基于gcc之上,它具有更先进的最优化特性,同时对c+的支持较好。zhangxyCH7:vi与c编程332014/3/167.3 Linux下函数库下函数库一个“程序函数库程序函数库”就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可在事后供其它的程序使用。程序函数库可使整个程序更加模块化更加模块化,更更容易重新编译容易重新编译,而且更方便升级而且更方便升级。可分为两种类型:静态函数库和共享函数库静态函数库和共享函数库。1.静态函数库静态函数库(static libraries):是一个普通的目标文件普通的目标文件的集合,一般用“.a”作为文件的后缀。静态函数库和共享函数库相比有很多缺点,占用内存空间多。使用ELF格式格式的静态库函数生成的代码比使用共享函数库的程序运行速度上快一些。zhangxyCH7:vi与c编程342014/3/16如/lib/libpwdb.a.可以用ar来创建一个静态函数库文件,或者往一个已经存在地静态函数库文件添加新的目标代码。例如例如,把file1.o和file2.o加入到my_library.a这个函数库文件:ar rcs my_library.a file1.o file2.o然后运行ranlib,给库加入一些索引信息。zhangxyCH7:vi与c编程352014/3/162.共享共享/动态函数库动态函数库(shared libraries):当一个可执行程序在启动的时候被加载的函数。每个共享函数库都有个特殊的名字,称作“soname”。soname名字命名必须以“lib”作为前缀,然后是函数库的名字,然后是“.so”,最后是版本号信息,如/lib/libtermcap.so.2.0.8。优点优点:多进程用同一函数库,修改函数库不需重新编译。安装一个新版本的函数库时,要先将这些函数库文件拷贝到一些特定的目录中,运行ldconfig。ldconfig检查已经存在的库文件,然后创建soname的符号链接到真正的函数库,同时设置/etc/ld.so.cache缓冲文件。zhangxyCH7:vi与c编程362014/3/16例如例如创建两个目标文件(file1.o和file2.o),然后创建一个包含file1.o和file2.o的共享函数库共享函数库。gcc-fPIC-c file1.cgcc-fPIC-c file2.cgcc-shared libxxx.so file1.o file2.o注注:-shared 标签告诉编译器这是要建立动态链接库。这与静态链接库的建立很不一样,后者用ar 命令。也注意到动态链接库的名字形式为“libxxx.so”后缀名为“.so”将test.c与动态库libtest.so链接生成执行文件test:$gcc test.c-L.-ltest-o test;/-L.:表示要连接的库在当前目录中;-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称。7zhangxyCH7:vi与c编程372014/3/16函数库和头文件的默认保存位置函数库和头文件的默认保存位置:a.函数库函数库/lib:系统必备共享函数库/usr/lib:标准共享函数库和静态函数库/usr/i486-linux-libc5/lib:libc5兼容性函数库/usr/X11R6/lib:X11R6的函数库/usr/local/lib:本地函数库b.头文件头文件/usr/include:系统头文件/usr/local/include:本地头文件zhangxyCH7:vi与c编程382014/3/16c.共享函数库的相关配置和命令共享函数库的相关配置和命令/etc/ld.so.conf:包含共享库的搜索位置ldconfig:共享库管理工具,一般在更新了共享库之后要运行该命令ldd:可查看可执行文件所使用的共享函数库如果有root权限的话,可修改/etc/ld.so.conf文件,然后调用/sbin/ldconfig来指定动态库的路径;如果没有root权限,那么只能采用指定LD_LIBRARY_PATH参数的方法指示动态连接器可以装载动态库的路径。zhangxyCH7:vi与c编程392014/3/167.4 make工程管理器工程管理器1、GUN make在开发大型项目中,通常利用make工具来自动完成编自动完成编译工作译工作。这些工作包括工作包括:若仅修改了某几个源文件,则只重新编译这几个源文件;若某个头文件被修改,则重新编译所有包含该头文件的源文件。make工具通过工具通过makefile文件来完成并自动维护编译文件来完成并自动维护编译工作工作。makefile要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,定义了源文件之间的依赖关系。当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。zhangxyCH7:vi与c编程402014/3/16这种自动编译可简化开发工作,避免不必要的重新编译,有利于系统的版本维护、升级及特定环境下软件重新编译。默认情况下,make工具在当前工作目录中按如下顺序搜索makefile:GNUmakefile makefile Makefile zhangxyCH7:vi与c编程412014/3/16UNIX中习惯使用makefile作为makfile文件文件。如果要使用其他文件作为makefile,可利用类似下面的make命令选项指定makefile文件:$make-f makefile.debug例例1:一个简单的一个简单的makefileprog:prog1.o prog2.o gcc prog1.o prog2.o-o prog prog1.o:prog1.c lib.h gcc-c-I.-o prog1.o prog1.c prog2.o:prog2.c gcc-c prog2.c zhangxyCH7:vi与c编程422014/3/162、makefile 基本结构基本结构makefile中一般包含如下内容:需要由make工具创建的项目项目,通常是目标文件和可执行文件。要创建的项目依赖于哪些文件依赖于哪些文件。创建每个项目时需要运行的命令运行的命令。例如例如一个C+源文件test.C,该源文件包含有自定义的头文件test.h,则目标文件目标文件test.o明确依赖于两个源文件明确依赖于两个源文件:test.C和和test.h。另外可能只希望利用g+命令来生成test.o目标文件。就可用如下makefile来定义规则:8zhangxyCH7:vi与c编程432014/3/16#This makefile just is a example.test.o:test.C test.h g+-c-g test.C 第一个非注释行指定test.o为目标,并且依赖于test.C 和test.h文件。随后的行指定了如何从目标所依赖的文件建立目标。当test.C或test.h文件在编译之后又被修改,则make工具可自动重新编译test.o。这种依赖关系在多源文这种依赖关系在多源文件的程序编译中尤其重要件的程序编译中尤其重要。通过这种依赖关系依赖关系的定义,make工具可避免许多不必要的编译工作。而make可根据目标上一次编译的时间和目标所依赖的源文件的更新时间而自动判断应当编译哪个源文件。zhangxyCH7:vi与c编程442014/3/16一个makefile文件中可定义多个目标,利用make target命令可指定要编译的目标,若不指定目标,则使用第一个目标。通常makefile中定义有clean目标,可用来清除编译过程中的中间文件。例如例如:clean:rm-f *.o 运行make clean时,将执行rm-f *.o命令。zhangxyCH7:vi与c编程452014/3/163、makefile 变量变量GNU的make工具还有许多便于表达依赖性关系以及建立目标命令的特色。其一就是变量变量或宏定义能力宏定义能力:#Define macros for name of compiler CC=gcc#Define a macr o for the CC flags CCFLAGS=-D_DEBUG-g-m486#A rule for building a object file test.o:test.c test.h$(CC)-c$(CCFLAGS)test.c 上例中CC和CCFLAGS就是make的变量。GNU make称之为变量,其他UNIX的make工具称之为宏。在makefile 中引用变量的值时,只需在变量名之前添加$符号,如$(CC)和$(CCFLAGS)。zhangxyCH7:vi与c编程462014/3/164、GNU make 的主要预定义变量的主要预定义变量GNU make有许多预定义的变量预定义的变量(自动变量自动变量),它还将所有的环境变环境变量量作为自己的预定义变量。主要预定义:$*不包含扩展名的目标文件名称。$+所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。$第一个依赖文件的名称。$?所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。$目标的完整名称。$所有的依赖文件,以空格分开,不包含重复的依赖文件。$%如果目标是归档成员,则该变量表示目标的归档成员名称。例如,若目标名称为 mytarget.so(image.o),则$为 mytarget.so,而$%为 image.o。zhangxyCH7:vi与c编程472014/3/16AR归档维护程序的名称,默认值为ar。ARFLAGS 归档维护程序的选项。AS汇编程序的名称,默认值为as。ASFLAGS 汇编程序的选项。CCC编译器的名称,默认值为cc。CFLAGSC编译器的选项。默认值为O.CPPC预编译器的名称,默认值为$(CC)-E。CPPFLAGS C预编译的选项。CXX C+编译器的名称,默认值为g+。CXXFLAGS C+编译器的选项。FCFORTRAN编译器的名称,默认值为f77。FFLAGSFORTRAN编译器的选项。zhangxyCH7:vi与c编程482014/3/165、运行运行make直接在make命令的后面键入目标名可建立指定的目标,如果直接运行make,则建立第一个目标。还可以用make-f mymakefile这样的命令指定make使用特定的 makefile,而不是默认的GNUmakefile、makefile或Makefile。上机作业上机作业:7-2hello.c;7-2hello.h(教材p89页)9zhangxyCH7:vi与c编程492014/3/16make工作时的执行步骤:(1)读入所有的makefile文件;(2)读入被include包括的其他makefile文件;(3)初始化文件中变量;(4)推导隐式规则,并分析所有规则;(5)为所有的目标文件创建依赖关系;(6)根据依赖关系,决定哪些目标要重新生成;(7)执行生成命令。zhangxyCH7:vi与c编程502014/3/16GNUmake工具还有一些其他选项,下面是GNU make常用命令行选项命令行选项含义:-C DIR在读取makefile之前改变到指定的目录DIR。-f FILE 以指定的FILE文件作为makefile。-h显示所有的make选项。-i忽略所有的命令执行错误。-I DIR当包含其他makefile文件时,用该选项指定搜索目录。-n只打印要执行的命令,但不执行这些命令。-p显示make变量数据库和隐含规则。-s在执行命令时不显示命令。-w在处理makefile之前和之后,显示工作目录。-W FILE假定文件FILE已经被修改。zhangxyCH7:vi与c编程512014/3/16实例实例(1)EXEC=copy_fileOBJS=copy_file.oHEADERS=CC=gccINC=-I.CFLAGS=$INC-g all:$EXEC$EXEC:$OBJS$CC$CFLAGS$LDFLAGS-o$OBJS$OBJS:$HEADERS.PHONY:cleanclean:-rm-f$OBJS$EXECzhangxyCH7:vi与c编程522014/3/16实例实例(2)#$Id:makefile.in,v 1.1 2000/10/08 17:22:53 tom Exp$#template makefile for DIALOG sample install#SHELL=/bin/shprefix=/usrexec_prefix=/usrsrcdir=.top_builddir=./.DESTDIR=bindir=$(DESTDIR)/usr/binCFLAGS=-O2-march=i386-mcpu=i686CPPFLAGS=-DHAVE_CONFIG_H-I$(top_builddir)-I$(srcdir)/./.-I.-I$(srcdir)zhangxyCH7:vi与c编程532014/3/16EXTRA_CFLAGS=CC=gccLDFLAGS=LIBS=-L./.-ldialog-lncurses -L/libRANLIB=ranlibRM=rm-fall:setupsetup:setup.o$(CC)-o$setup.o$(LIBS)clean:rm-f*.o setuptest:setup./setupzhangxyCH7:vi与c编程542014/3/166、make工具工具autotools对于一个较大的项目而言编写makefile难度较大。autotools系列工具只需用户输入简单的目标文件、依赖文件、文件目录等就可以轻松地生成makefile。autotools工具还可以完成系统配置信息的收集,从而可以方便地处理各种移植性的问题。Linux上的软件开发一般都用autotools来制作makefile。也有使用也有使用cmake工具辅助工具辅助makefile文件制作文件制作。10zhangxyCH7:vi与c编程552014/3/161)查看查看/安装安装autotools工具工具用which命令查看是否安装了autotools工具。which命令命令:查找文件查找文件。语法:which 文件.补充说明:which指令会在环境变量$PATH设置(env命令)的目录里查找符合条件的文件。参数:-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。-p 与-n参数相同,但此处的包括了文件的路径。-w 指定输出时栏位的宽度。-V 显示版本信息也可以使用也可以使用whereis命令从文件树中查找文件命令从文件树中查找文件。zhangxyCH7:vi与c编程562014/3/16autotools包含下工具:aclocal:生成aclocal.m4文件,用于处理本地的宏定义;autoscan:给定目录或子目录中查找源文件,若没有给出,就在当前目录中查找。生成autoscan.scan。autoconf:基于configre.in和aclocal.m4生成configure文件。autoheader:从acconfig.h中复制用户附加的符号定义,生成config.h.in。automake:利用makefile.am文件,生成makefile.in。configure:将makefile.in编程makefile。2)autotools使用流程使用流程zhangxyCH7:vi与c编程572014/3/16./configureautomakeconfigure.scanconfigure.inaclocal.m4makefilemakefile.inconfig.h.inconfigureautoscanaclocalautoheadermakefile.amautoconfautotools使用流程:zhangxyCH7:vi与c编程582014/3/163)makefile的使用的使用 make all;根据makefile生成可执行文件;make install;安装可执行文件 make clean;清楚之前编译的可执行文件以及编译文件;make dist;将程序和相关文档打包成一个压缩文件供发布。zhangxyCH7:vi与c编程592014/3/167.5 符号调试器符号调试器gdb1、gdb简介简介gdb为GNU的调试器,是一个交互式工具,工作在字符模式。Xwindow中有一个gdb 前端图形工具,称xxgdb。gdb是功能强大的调试程序,可完成如下的调试任务:设置断点设置断点;监视程序变量的值监视程序变量的值;程序的单步执行程序的单步执行;修改变量的值修改变量的值。在gdb调试程序之前,须使用-g选项编译源文件。可在makefile中定义CFLAGS变量:CFLAGS=-g,运行gdb调试程序时通常使用命令:gdb prognamezhangxyCH7:vi与c编程602014/3/16在gdb提示符处键入help,将列出命令的分类。主要的分类有:aliases:命令别名breakpoints:断点定义(b);data:数据查看;files:指定并查看文件;internals:维护命令;running:程序执行;stack:调用栈查看;statu:状态查看;tracepoints:跟踪程序执行。后跟命令的分类名,可获得该类命令的详细清单。11zhangxyCH7:vi与c编程612014/3/162、gdb常用命令常用命令break NUM在指定的行上设置断点。bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。clear删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。continue继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。display EXPR每次程序停止后显示表达式的值。表达式由程序定义的变量组成。file FILE装载指定的可执行文件进行调试。help NAME显示指定命令的帮助信息。zhangxyCH7:vi与c编程622014/3/16info break显示当前断点清单,包括到达断点处的次数。info files显示被调试文件的详细信息。info func显示所有的函数名称。info local显示当函数中的局部变量信息。info prog显示被调试程序的执行状态。info var显示所有的全局和静态变量名

    注意事项

    本文(第7章 vi与C编程.pdf)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开