《第6章开发工具精选文档.ppt》由会员分享,可在线阅读,更多相关《第6章开发工具精选文档.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第6章开发工具本讲稿第一页,共三十七页 主要内容gcc编译系统的概念和使用 gdb程序调试工具的概念和使用程序维护工具make 的概念和使用 本讲稿第二页,共三十七页 6.1 gcc编译系统6.1.1 文件名后缀文件名后缀文件名后缀 文文 件件 类类 型型 文件名后缀文件名后缀 文文 件件 类类 型型 .c.cC C源文件源文件 .F .fpp .F .fpp .FPP.FPPFORTRANFORTRAN源文件源文件 .i.i预处理后的预处理后的C C源文件源文件 .s.s汇编程序文件汇编程序文件 .ii.ii预处理后的预处理后的C+C+源文件源文件 .S.S必须预处理的汇编程序文件必须预处理
2、的汇编程序文件 .m.mObjective-CObjective-C源文件源文件 .o.o目标文件目标文件 .mi.mi预处理后的预处理后的Objective-CObjective-C源文件源文件 .a.a静态链接库静态链接库 .h.h头文件头文件 .so.so动态链接库动态链接库 .C .cc .cp.C .cc .cp.cpp .c+.cpp .c+.cxx.cxxC+C+源文件源文件 本讲稿第三页,共三十七页6.1.2 C语言编译过程 1 1预处理阶段预处理阶段 预处理是常规编译预处理是常规编译之前预先进行的工作,之前预先进行的工作,故此得名。它读取故此得名。它读取C C语言语言源文件,
3、对其中以源文件,对其中以“#”开头的指令(伪指令)开头的指令(伪指令)和特殊符号进行处理。和特殊符号进行处理。主要包括文件包含、宏主要包括文件包含、宏定义和条件编译指令。定义和条件编译指令。本讲稿第四页,共三十七页2 2编译阶段编译阶段 编编译译程程序序(CompilerCompiler)对对预预处处理理之之后后的的输输出出文文件件进进行行词词法法分分析析和和语语法法分分析析,试试图图找出所有不符合语法规则的部分找出所有不符合语法规则的部分 3 3汇编过程汇编过程 汇汇编编过过程程是是汇汇编编程程序序(AssemblerAssembler)把把汇汇编编语语言言代代码码翻翻译译成成目目标标机机器
4、器代代码码的过程的过程 4 4连接阶段连接阶段 连接程序(连接程序(LinkerLinker)要解决外部符号访问地址问题)要解决外部符号访问地址问题 连接模式分为静态连接和动态连接连接模式分为静态连接和动态连接 本讲稿第五页,共三十七页6.1.3 gcc命令行选项 在在LinuxLinux系统中,系统中,C/C+C/C+程序编译命令是程序编译命令是gccgcc,例如:,例如:$gcc f1.c f2.c$gcc f1.c f2.c (针对(针对C C语言源程序)语言源程序)执行完成后,生成默认的可执行文件执行完成后,生成默认的可执行文件a.outa.out。1 1预处理选项预处理选项 C C语
5、言预处理程序通常称为语言预处理程序通常称为cppcpp,它是宏处理程序,由,它是宏处理程序,由C C编译程序自动调用,在编译程序自动调用,在真正的编译过程之前对程序进行转换。真正的编译过程之前对程序进行转换。几个预处理常用选项几个预处理常用选项:-C -D name -D -C -D name -D namename=definitiondefinition -U -U namename -I -I dirdir -o -o filefile -E-E 本讲稿第六页,共三十七页2 2编译程序选项编译程序选项 gcc gcc编译程序常用选项及其作用编译程序常用选项及其作用 选选 项项 格格 式式
6、 功功 能能 -c-c 只生成目标文件,不进行连接。用于对源文件的分别编译只生成目标文件,不进行连接。用于对源文件的分别编译 -S-S 只进行编译,不做汇编,生成汇编代码文件格式,其名与源文只进行编译,不做汇编,生成汇编代码文件格式,其名与源文件相同,但扩展名为件相同,但扩展名为.s.s-o-o filefile 将输出放在文件将输出放在文件filefile中。如果未使用该选项,则可执行文件放中。如果未使用该选项,则可执行文件放在在a.outa.out中中-g-g 指示编译程序在目标代码中加入供调试程序指示编译程序在目标代码中加入供调试程序gdbgdb使用的附加信使用的附加信息息-v-v 在标
7、准出错输出上显示编译阶段所执行的命令,即编译驱动程在标准出错输出上显示编译阶段所执行的命令,即编译驱动程序及预处理程序的版本号序及预处理程序的版本号 本讲稿第七页,共三十七页3 3优化程序选项优化程序选项 优化程序常用的选项及其作用优化程序常用的选项及其作用 选选 项项 格格 式式 功功 能能 -O-O-O1-O1 试图减少代码大小和执行时间,但并不执行需要花费大量编试图减少代码大小和执行时间,但并不执行需要花费大量编译时间的任何优化译时间的任何优化 -O2-O2 在在-O1-O1级别的优化之上,还进行一些额外调整工作级别的优化之上,还进行一些额外调整工作除不除不做循环展开、函数内联和寄存器重
8、新命名外,几乎进行所有做循环展开、函数内联和寄存器重新命名外,几乎进行所有可选优化可选优化 -O3-O3 除了完成所有除了完成所有-O2-O2级别的优化之外,还进行包括循环展开和级别的优化之外,还进行包括循环展开和其他一些与处理器特性相关的优化工作其他一些与处理器特性相关的优化工作 -O0-O0 不执行优化不执行优化 -Os-Os 具有具有-O2-O2级别的优化,同时并不特别增加代码大小级别的优化,同时并不特别增加代码大小 本讲稿第八页,共三十七页4 4连接程序选项连接程序选项 连接程序常用的选项及其功能连接程序常用的选项及其功能 选选 项项 格格 式式 功功 能能 object-file-o
9、bject-file-namename 不以专用后缀结尾的文件名就认为是目标文件名或库名。连接程序可以不以专用后缀结尾的文件名就认为是目标文件名或库名。连接程序可以根据文件内容来区分目标文件和库根据文件内容来区分目标文件和库 -c -S -E-c -S -E 如果使用其中任何一个选项,那么都不运行连接程序,而且目标文件名如果使用其中任何一个选项,那么都不运行连接程序,而且目标文件名不应该用做参数不应该用做参数 -l-llibrarylibrary 连接时搜索由连接时搜索由librarylibrary命名的库。连接程序按照在命令行上给定的顺序搜命名的库。连接程序按照在命令行上给定的顺序搜索和处理
10、库及目标文件。实际的库名是索和处理库及目标文件。实际的库名是liblibraryliblibrary,但按默认规则,开头,但按默认规则,开头的的liblib和后缀(和后缀(.a.a或或.so.so)可以被省略)可以被省略 -static-static 在支持动态连接的系统中,它强制使用静态链接库,而阻止连接动态库;在支持动态连接的系统中,它强制使用静态链接库,而阻止连接动态库;而在其他系统中不起作用而在其他系统中不起作用 -L-Ldirdir 把指定的目录把指定的目录dirdir加到连接程序搜索库文件的路径表中,即在搜索加到连接程序搜索库文件的路径表中,即在搜索-l-l后面后面列举的库文件时,
11、首先到列举的库文件时,首先到dirdir下搜索,找不到再到标准位置下搜索下搜索,找不到再到标准位置下搜索 -B-Bprefixprefix 该选项规定在什么地方查找可执行文件、库文件、包含文件和编译程序该选项规定在什么地方查找可执行文件、库文件、包含文件和编译程序本身数据文件本身数据文件 -o-o filefile 指定连接程序最后生成的可执行文件名称为指定连接程序最后生成的可执行文件名称为filefile,不是默认的,不是默认的a.out a.out 本讲稿第九页,共三十七页 LinuxLinux下库文件的命名有一个约定,所有的库名都以下库文件的命名有一个约定,所有的库名都以liblib开头
12、。形如:开头。形如:libx.a libx.a 其中,其中,x x是指定的库名是指定的库名 以以.a.a(归档,(归档,archivearchive)结尾的库是静态库,以)结尾的库是静态库,以.so.so(共享目标,(共享目标,shared objectshared object)结尾的库是动态库结尾的库是动态库 生成静态库的方法实际上可分为两步:生成静态库的方法实际上可分为两步:将各函数的源文件编译成目标文件将各函数的源文件编译成目标文件 使用使用arar工具将目标文件收集起来,放到一个归档文件中工具将目标文件收集起来,放到一个归档文件中 本讲稿第十页,共三十七页 6.2 gdb程序调试工具
13、 程序中的错误可按性质分为三种:程序中的错误可按性质分为三种:(1 1)编译错误,即语法错误。)编译错误,即语法错误。(2 2)运行错误。)运行错误。(3 3)逻辑错误。)逻辑错误。查找程序中的错误,诊断其准确位置,并予以改正,这就是程序调试。查找程序中的错误,诊断其准确位置,并予以改正,这就是程序调试。程序调试分为人工查错与机器调试。程序调试分为人工查错与机器调试。本讲稿第十一页,共三十七页6.2.1 启动gdb和查看内部命令 当程序执行过程中忽然中止,屏幕上显示当程序执行过程中忽然中止,屏幕上显示-core dumped-core dumped消息,然后显示提消息,然后显示提示符,其中,示
14、符,其中,表示出错原因表示出错原因 为了发挥为了发挥gdbgdb的全部功能,需要在编译源程序时使用的全部功能,需要在编译源程序时使用-g-g选项选项 。如:。如:$gcc -g prog.c -o prog$gcc -g prog.c -o prog (针对(针对C C语言源程序语言源程序prog.cprog.c)$gcc -g program.cpp -o program$gcc -g program.cpp -o program (针对(针对C+C+源程序源程序program.cppprogram.cpp)启动启动gdbgdb的方法有以下几种:的方法有以下几种:(1 1)直接使用)直接使用
15、shellshell命令命令gdb gdb (2 2)以一个可执行程序作为)以一个可执行程序作为gdbgdb的参数的参数 (3 3)同时以可执行程序和)同时以可执行程序和corecore文件作为文件作为gdbgdb的参数的参数 (4 4)指定一个进程号)指定一个进程号PIDPID作为作为gdbgdb的第二个参数的第二个参数一旦启动一旦启动gdbgdb,就显示,就显示gdbgdb提示符:提示符:(gdbgdb)并等待用户输入相应的内部命令并等待用户输入相应的内部命令 本讲稿第十二页,共三十七页本讲稿第十三页,共三十七页6.2.2 显示源程序和数据1 1显示和搜索源程序显示和搜索源程序(1 1)显
16、示源文件)显示源文件 利用利用listlist命令可以显示源文件中指定的函数或代码行命令可以显示源文件中指定的函数或代码行 list list-list list list-list filefile:numnum list list startstart,endend list list filefile:functionfunction(2 2)模式搜索)模式搜索 forward-search forward-search regexpregexp search search regexpregexp reverse-search reverse-search regexpregexp 本
17、讲稿第十四页,共三十七页2 2查看运行时数据查看运行时数据(1 1)printprint命令命令 一般使用格式是一般使用格式是:print /print /fmtfmt expexp 当被调试的程序停止时,可以用当被调试的程序停止时,可以用printprint命令(简写为命令(简写为p p)或同义命令)或同义命令inspectinspect来查看当前程序中来查看当前程序中运行的数据。运行的数据。(2 2)gdbgdb所支持的运算符所支持的运算符 typetype adrexpadrexp 表示一个数据类型为表示一个数据类型为typetype、存放地址为、存放地址为adrexpadrexp的数据
18、。的数据。是一个与数组有关的双目运算符,使用形式如:是一个与数组有关的双目运算符,使用形式如:print array10print array10 print array35print array35 filefile:varvar (或者(或者 functionfunction:varvar )表示文件表示文件filefile(或者函数(或者函数functionfunction)中变量)中变量varvar的值的值 本讲稿第十五页,共三十七页(3 3)输出格式)输出格式 在在print /print /fmtfmt expexp命令中,命令中,“/”之后的之后的fmtfmt是表示输出格式的字母
19、,它由表示格式的字母是表示输出格式的字母,它由表示格式的字母和表示数据长度的字母组成和表示数据长度的字母组成 。如:。如:表示格式表示格式 的字母:的字母:o x d u t f a i c so x d u t f a i c s 表示长度的字母表示长度的字母:b w h gb w h g(4 4)whatiswhatis命令显示出变量的数据类型命令显示出变量的数据类型 (5 5)x x命令可以查看内存地址中数据的值命令可以查看内存地址中数据的值。其使用格式是:。其使用格式是:x /x /fmtfmt addressaddress(6 6)displaydisplay命令可以预先设置一些要显
20、示的表达式。其一般格式是:命令可以预先设置一些要显示的表达式。其一般格式是:display /display /fmtfmt expexp 要取消对先前设置的某些表达式的自动显示功能,可以使用以下命令:要取消对先前设置的某些表达式的自动显示功能,可以使用以下命令:undisplay undisplay disnumdisnum delete display delete display disnumdisnum本讲稿第十六页,共三十七页(7 7)显示函数调用栈信息)显示函数调用栈信息 显示函数调用栈信息的命令显示函数调用栈信息的命令 格格 式式 功功 能能 backtrace backtrac
21、e n n|-|-n n bt bt n n|-|-n n where where n n|-|-n n 打印当前的函数调用栈的所有信息。如果有参数打印当前的函数调用栈的所有信息。如果有参数n n(正整数)(正整数),则只打印栈顶上,则只打印栈顶上n n层帧的信息;如果是层帧的信息;如果是-n-n的形式,则只打的形式,则只打印栈底印栈底n n层帧的信息层帧的信息 frame frame n n f f n n 其中,其中,n n是栈中帧的编号,从是栈中帧的编号,从0 0(表示栈顶)开始递增。如果(表示栈顶)开始递增。如果不带参数,则显示出当前栈帧的信息;如果给出参数不带参数,则显示出当前栈帧的
22、信息;如果给出参数n n,则,则选定帧号为选定帧号为n n的帧作为当前帧的帧作为当前帧 up up n n 表示向上移动表示向上移动n n层栈帧。如果没有参数,则表示向上移动一层栈帧。如果没有参数,则表示向上移动一层层 down down n n 表示向下移动表示向下移动n n层栈帧。如果没有参数,则表示向下移动一层栈帧。如果没有参数,则表示向下移动一层层 info frameinfo frameinfo f info f 显示出当前栈帧的所有信息,如函数地址,调用函数的地址,显示出当前栈帧的所有信息,如函数地址,调用函数的地址,被调用函数的地址,目前函数的程序语言、函数参数地址及被调用函数的
23、地址,目前函数的程序语言、函数参数地址及值、局部变量的地址等。值、局部变量的地址等。本讲稿第十七页,共三十七页6.2.3 改变和显示目录或路径(1 1)directorydirectory命令一般格式是:命令一般格式是:directory directory dirdir 或者或者 dir dir dirdir(2 2)cdcd命令使用格式为:命令使用格式为:cd cd dirdir(3 3)pathpath命令使用格式是:命令使用格式是:path path dirsdirs(4 4)pwdpwd命令命令(5 5)show directoriesshow directories(6 6)sho
24、w pathsshow paths本讲稿第十八页,共三十七页6.2.4 控制程序的执行 断点(断点(breakpointbreakpoint),观察点(),观察点(watchpointwatchpoint),捕捉点(),捕捉点(catchpointcatchpoint)它们统称为停止点它们统称为停止点 1 1设置和显示断点设置和显示断点 (1 1)设置断点:用)设置断点:用breakbreak命令(其缩写形式为命令(其缩写形式为b b)设置断点:)设置断点:break break linenumlinenum break break linenumlinenum if if condition
25、condition break break functionfunction break break filefile:linenumlinenum break break filefile:functionfunction break *break *addressaddress break break (2 2)显示断点)显示断点 info breakpoints info breakpoints numnum info break info break numnum 本讲稿第十九页,共三十七页2 2设置和显示观察点设置和显示观察点(1 1)设置观察点)设置观察点watch watch e
26、xprexpr rwatch rwatch exprexpr awatch awatch exprexpr(2 2)显示观察点)显示观察点 info breakpoints info watchpointsinfo breakpoints info watchpoints 3 3设置捕捉点设置捕捉点 命令命令catchcatch的格式是:的格式是:catch catch eventevent 另一个命令是另一个命令是tcatch tcatch eventevent 4 4维护停止点维护停止点 delete clear disable enable delete clear disable en
27、able 5 5运行程序运行程序 runrun命令的格式:命令的格式:run run argsargs 本讲稿第二十页,共三十七页6 6程序的单步跟踪和连续执行程序的单步跟踪和连续执行(1 1)单步跟踪)单步跟踪 实行单步跟踪的命令是实行单步跟踪的命令是stepstep和和nextnext,其格式是:,其格式是:step step NN next next NN(2 2)连续执行)连续执行 continue continue,c c或或fgfg命令命令 7 7函数调用函数调用 call call exprexpr return exprreturn expr本讲稿第二十一页,共三十七页6.2.
28、5 其他常用命令1 1执行执行shellshell命令命令 其格式是:其格式是:shell shell command-stringcommand-string2 2修改变量值修改变量值(gdb)print x=10(gdb)print x=10(gdb)set variable x=10(gdb)set variable x=103 3跳转执行跳转执行 jump jump linenumlinenum jump *jump *addraddr 本讲稿第二十二页,共三十七页6.2.6 应用示例 示例程序源代码 本讲稿第二十三页,共三十七页(1 1)使用带)使用带-g-g选项的选项的gccgcc
29、命令对该程序进行编译:命令对该程序进行编译:$gcc -g dbme.c -o dbme$gcc -g dbme.c -o dbme 程序运行时出现错误程序运行时出现错误段错误段错误(2 2)用程序名)用程序名dbmedbme作为参数启动作为参数启动gdbgdb。(3 3)在)在gdbgdb环境下运行该程序。环境下运行该程序。本讲稿第二十四页,共三十七页 使用使用backtracebacktrace命令命令 使用使用listlist命令显示相关行的内容命令显示相关行的内容 本讲稿第二十五页,共三十七页 利用利用printprint命令可以打印出任何合法表达式的值命令可以打印出任何合法表达式的值
30、 本讲稿第二十六页,共三十七页(4 4)设置断点)设置断点本讲稿第二十七页,共三十七页另外设置一个断点,另外设置一个断点,i i值等于值等于9999。本讲稿第二十八页,共三十七页 6.3 程序维护工具make6.3.1 make的工作机制 GNUGNU的的makemake的工作过程如下:的工作过程如下:依次读入各依次读入各makefilemakefile文件;文件;初始化文件中的变量;初始化文件中的变量;推导隐式规则,并分析所有规则;推导隐式规则,并分析所有规则;为所有的目标文件创建依赖关系链;为所有的目标文件创建依赖关系链;根据依赖关系和时间数据,确定哪些目标文件要重新生成;根据依赖关系和时
31、间数据,确定哪些目标文件要重新生成;执行相应的生成命令。执行相应的生成命令。本讲稿第二十九页,共三十七页1 1makefilemakefile文件文件 makemake被调用后会依次查找名为被调用后会依次查找名为GNUmakefileGNUmakefile,makefilemakefile和和MakefileMakefile的描述文件的描述文件 一个示例一个示例:prog:x.o y.o z.o assmb.oprog:x.o y.o z.o assmb.o gcc x.o y.o z.o assmb.o -L/home/mqc/lib-lm -o prog gcc x.o y.o z.o a
32、ssmb.o -L/home/mqc/lib-lm -o progx.o:x.c defs.hx.o:x.c defs.h gcc -c x.c gcc -c x.cy.o:y.c defs.hy.o:y.c defs.h gcc -c y.c gcc -c y.cz.o:z.cz.o:z.c gcc -c z.c gcc -c z.cassmb.o:assmb.sassmb.o:assmb.s as -o assmb.o assmb.s as -o assmb.o assmb.sclean:clean:rm prog *.o rm prog *.o本讲稿第三十页,共三十七页 Makefile
33、Makefile规则有以下通用形式:规则有以下通用形式:目标文件:目标文件:相依文件相依文件 命令命令1#1#注释注释 命令命令n#n#注释注释 在格式上应注意:在格式上应注意:依赖行从一行的开头开始书写依赖行从一行的开头开始书写 各命令行单独占一行,每个命令行的第一个字符必须是制表符各命令行单独占一行,每个命令行的第一个字符必须是制表符,而不能使,而不能使用用8 8个空格个空格#号后的内容为注释号后的内容为注释 在依赖行上,目标文件和相依文件之间要用一个或两个冒号分开在依赖行上,目标文件和相依文件之间要用一个或两个冒号分开 本讲稿第三十一页,共三十七页2 2依赖关系图依赖关系图 使使用用ma
34、kemake的的一一个个核核心心问问题题是是确确定定好好各各文文件件之之间间的的依依赖赖关关系系。一一般般来来说说,生生成成一一个个目目标标文文件件可可能能有有多多个个不不同同的的途途径径,根根据据这这些些途途径径能能够够指指定定不不同同的依赖关系。的依赖关系。makemake是是依依据据“关关系系图图深深度度优优先先搜搜索索”的的算算法法来来核核查查目目标标文文件件及及相相依依文文件件的的修修改改时时间间,深度相等时,可由左到右依次进行。深度相等时,可由左到右依次进行。适适当当地地引引入入中中间间结结果果,合合理理地地构构造造依依赖赖关关系系图图,可可以以省省去去一一部部分分编编译译工工作作
35、量量。但但并并非非层次越多越好,要考虑目标文件的生成过程及其所起的作用。层次越多越好,要考虑目标文件的生成过程及其所起的作用。本讲稿第三十二页,共三十七页6.3.2 使用变量1 1变量定义和引用变量定义和引用 makemake的变量(又称做宏定义)一般均由大写字母和数字组成。的变量(又称做宏定义)一般均由大写字母和数字组成。定义变量的一般格式是:定义变量的一般格式是:=例如,下面都是合法的变量定义:例如,下面都是合法的变量定义:OBJECT=x.o y.o z.o OBJECT=x.o y.o z.o LIBES=-lm LIBES=-lm 引用引用makemake变量的方式与引用变量的方式与
36、引用shellshell变量类似,即:把变量用圆括号括起来,变量类似,即:把变量用圆括号括起来,并在前面加上并在前面加上“$”符号。例如:符号。例如:$(OBJECT)$(OBJECT)$(LIBES)$(LIBES)本讲稿第三十三页,共三十七页2 2自动变量自动变量 除了用户定义的变量外,除了用户定义的变量外,makemake也可以使用环境变量、自动变量和预定义也可以使用环境变量、自动变量和预定义变量。变量。makemake中定义了一些它们的值会因环境的不同而发生改变的变量,被称为自动变量。中定义了一些它们的值会因环境的不同而发生改变的变量,被称为自动变量。例如:例如:$表示规则中的目标文件
37、集合表示规则中的目标文件集合$?$?所有比目标文件还新的那些相依文件的集合,以空格分开所有比目标文件还新的那些相依文件的集合,以空格分开$规则中的第一个相依文件名规则中的第一个相依文件名$规则中所有相依文件的集合,以空格分开规则中所有相依文件的集合,以空格分开$%$%仅当目标文件是一个静态库成员时,表示规则中的目标成员仅当目标文件是一个静态库成员时,表示规则中的目标成员 名,而名,而此时此时$表示相应库文件的名称表示相应库文件的名称$*$*如果目标文件的后缀是如果目标文件的后缀是makemake所识别的,则所识别的,则$*$*就是去掉后缀的目就是去掉后缀的目标文件名,但该引用只有用在隐含规则中
38、才有意义标文件名,但该引用只有用在隐含规则中才有意义本讲稿第三十四页,共三十七页3 3预定义变量预定义变量 归档库归档库:AR ARFLAGS:AR ARFLAGS 汇编命令:汇编命令:AS ASFLAGS AS ASFLAGS C C编译命令:编译命令:CC CPP CFLAGS CPPFLAGS CC CPP CFLAGS CPPFLAGS C+C+编译命令:编译命令:CXX CXXFLAGS CXX CXXFLAGS本讲稿第三十五页,共三十七页6.3.3 隐式规则 在在makefilemakefile文件中显式地指定了一些规则,称为显式规则。文件中显式地指定了一些规则,称为显式规则。隐式
39、规则就是一种惯例,即预先约定好了,不需要在隐式规则就是一种惯例,即预先约定好了,不需要在makefilemakefile文件中写出来的规则。文件中写出来的规则。几个常用的隐式规则:几个常用的隐式规则:编译编译C C语言程序的隐式规则语言程序的隐式规则 编译编译C+C+程序的隐式规则程序的隐式规则 汇编和汇编预处理的隐式规则汇编和汇编预处理的隐式规则 本讲稿第三十六页,共三十七页6.3.4 make命令常用选项 makemake命令有丰富的命令行选项。命令有丰富的命令行选项。例如:例如:-C -C dirdir 把目录改到把目录改到dirdir -d -d 输出所有的调试信息输出所有的调试信息 -e -e 指明环境变量优先于指明环境变量优先于makefilemakefile文件中的变量文件中的变量 -f -f filefile 使用使用filefile文件作为文件作为makefilemakefile文件文件 -I -I 忽略在执行重新生成文件的命令的过程中出现的所有错误忽略在执行重新生成文件的命令的过程中出现的所有错误 -I -I dirdir 或或 I Idirdir 指定一个包含指定一个包含makefilemakefile文件的搜索目录文件的搜索目录 本讲稿第三十七页,共三十七页
限制150内