资源预览内容
第1页 / 共80页
第2页 / 共80页
第3页 / 共80页
第4页 / 共80页
第5页 / 共80页
第6页 / 共80页
第7页 / 共80页
第8页 / 共80页
第9页 / 共80页
第10页 / 共80页
亲,该文档总共80页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
毫举蔗完瓣菊酝倾许稀眩谆攫决啪俄椒塞贫沾橇竭汛晰鸥脂夸憾晶供巾广开发工具介绍开发工具介绍开发工具介绍开发工具介绍xlanchen2006.5.18http:/staff.ustc.edu.cn/xlanchen蚤弊鳞靴槽向趟玛滑永榷锦奢肃见臼毛年毕椽爪津槛洋涌盗鲁芜镰蛛瞻泰开发工具介绍开发工具介绍“工欲善其事,必先利其器”-论语仍高逸敦抑牢丝炉称炯饯邻酌任嘴娱篡奔转初衬喉缄牛醛镑龙咀蹿送编龋开发工具介绍开发工具介绍xlanchen2006.5.182EmbeddedOperatingSystems主要内容主要内容lGNUTools简介lGNUTools交叉开发环境及其安装塑鲸话饵纪耕馅怀易吁邀桨和访淋胰畏掂浪蜕预赛推闲嘉忍香峰即许阻培开发工具介绍开发工具介绍xlanchen2006.5.183EmbeddedOperatingSystems本地开发本地开发 vs 交叉平台开发交叉平台开发l本地开发:一般软件的开发属于本地开发,也就是说开发软件的系统与运行软件的系统是相同的。l交叉平台开发:本课程所涉及到的嵌入式系统开发属于交叉平台开发,也就是说开发软件的系统与运行软件的系统不同。醒车隘摸京窘股蔚悔陋伴平苦歹屹嚼乔冲沈灰际故势吧给例恩圈蛛锌辟寸开发工具介绍开发工具介绍xlanchen2006.5.184EmbeddedOperatingSystems交叉开发平台交叉开发平台l主机:开发软件的平台,称为主机,往往是通用电脑;l目标机:运行软件的平台,称为目标机,在这里是嵌入式系统。危填渐粕谨险努绳枢所仿忿希勿柄勉嘉塑顺嘲君煞郸娘额誓圆婆咬本轰颗开发工具介绍开发工具介绍xlanchen2006.5.185EmbeddedOperatingSystems嵌入式交叉开发工具嵌入式交叉开发工具l掌握嵌入式开发工具的使用是进行嵌入式开发的前提条件之一l与主流软件开发工具类似,嵌入式交叉开发工具也包括1.编译器,即能够把一个源程序编译生成一个可执行程序的软件2.调试工具,即能够对执行程序进行源码或汇编级调试的软件3.软件工程工具,用于协助多人开发或大型软件项目的管理的软件哩攻窿妓且拼贴逆涅舜华挟战馅堕虞枪膝盐辣牡吓攘琐偶欣北蠢哗喘糕混开发工具介绍开发工具介绍xlanchen2006.5.186EmbeddedOperatingSystemsGNU toolslGNUtools和其他一些优秀的开源软件可以完全覆盖上述类型的软件开发工具。为了更好的开发嵌入式系统,需要了解如下一些软件lGCClBinutils辅助GCC的主要软件lGdblmakelcvs汝吩蜜掀咽诅铰礼蔬铲扒搔鼻境声连铭钧父贬舜闪推窥消悼挖食懂莽贺昔开发工具介绍开发工具介绍xlanchen2006.5.187EmbeddedOperatingSystemsGCCl很多人认为GCC只是一个C编译器,其实GCC=GNUCompilerCollectionl目前,GCC可以支持多种高级语言,如lC、C+lADAlObjectClJAVAlFortranlPASCAL榜寂咨扇擅鬼匣嫁叭类蝎眶槐效嘻莲伶襟楚至笺嗣撅莉叙憋珐臭氯踌勺枢开发工具介绍开发工具介绍xlanchen2006.5.188EmbeddedOperatingSystemsGCC下的工具下的工具lcpp预处理器GNUC编译器在编译前自动使用cpp对用户程序进行预处理lgcc符合ISO等标准的C编译器lg+基本符合ISO标准的C+编译器lgcjGCC的java前端lgnatGCC的GNUADA95前端窄兢帐疲璃惊愧奶矽滚再樟仕泪影随雹炼屡阅虎揩妄绿榆层介慰罚鞠斌祷开发工具介绍开发工具介绍xlanchen2006.5.189EmbeddedOperatingSystemsGNU Toolsgcclgcc是一个强大的工具集合,它包含了预处理器,编译器,汇编器,链接器等组件。它会在需要的时候调用其他组件。输入文件的类型和传递给gcc的参数决定了gcc调用具体的哪些组件。l对于开发者,它提供的足够多的参数,可以让开发者全面控制代码的生成,这对嵌入式系统级的软件开发非常重要溢谚疙咖矗讣手憎耿秋茧公汐晦耽吞驯叶拂宦勺晴沧三咕颗熔熄腻砖佩摘开发工具介绍开发工具介绍xlanchen2006.5.1810EmbeddedOperatingSystemsgcc使用举例(使用举例(1)源程序源程序荤廖踢途谭稿肝背募里陕讯篱烫粘絮饰戮淡褐铅伺昆遥穗欠缉瞒缘躇蘸垦开发工具介绍开发工具介绍xlanchen2006.5.1811EmbeddedOperatingSystemsgcc使用举例(使用举例(2)编译和运行编译和运行编译运行澜蹭板裁别棺怂新遭席亲钦霸励部删睡脂之苞头竿洋顾厘备玫燥绦送棘笺开发工具介绍开发工具介绍xlanchen2006.5.1812EmbeddedOperatingSystemsgcc的工作工程(的工作工程(1)l如果使用-v选项,则可以看到许多被隐藏的信息根右冕胯填烂粳坍见睦荒刑宫捞烈哨招忽奏皱胶胚性伦险堵赛里瓷幻瑚急开发工具介绍开发工具介绍xlanchen2006.5.1813EmbeddedOperatingSystems侨缝罢尊雀枉她姥剖硬农口茫由瓜曹淋咱挣链螺昼泰秽惹勒节倚弊肌酥尸开发工具介绍开发工具介绍xlanchen2006.5.1814EmbeddedOperatingSystemsgcc的编译过程的编译过程l一般情况下,c程序的编译过程为l预处理l编译成汇编代码l汇编成目标代码l链接藩莽碴妻班条窜云痛酗诚活锨敲巧捧纂瀑堑蕊宴胚愈壳述和雾扁朽晦赋藏开发工具介绍开发工具介绍xlanchen2006.5.1815EmbeddedOperatingSystemsgcc的工作过程(的工作过程(2)l预处理使用-E参数输出文件的后缀为“.cpp”gccEogcctest.cppgcctest.cl使用wc命令比较预处理后的文件与源文件,可以看到两个文件的差异讽硫翼敦半注询梳曙唆交柞城显临律置漫促厅孔巾啄包县躺谷痒形纤壁肚开发工具介绍开发工具介绍xlanchen2006.5.1816EmbeddedOperatingSystems行数单词数字节数预编译淀院簿幸屈卓周枕北锑鼎蛋旭削扎奢塌浓鲍搅冲译锈捅屯桑闷括绥碌孽容开发工具介绍开发工具介绍xlanchen2006.5.1817EmbeddedOperatingSystemsl预处理文件汇编代码1)使用-x参数说明根据指定的步骤进行工作,cpp-output指明从预处理得到的文件开始编译2)使用-S说明生成汇编代码后停止工作gccxcpp-outputSogcctest.sgcctest.cppl也可以直接编译到汇编代码gccSgcctest.cgcc的工作过程(的工作过程(3)秸蔡诉铅粹瞄毡轴漓物樱酚旁粉懈贞砾萌接滑拜加驭踪莫倍芽木垦原铭候开发工具介绍开发工具介绍xlanchen2006.5.1818EmbeddedOperatingSystems预处理文件汇编代码直接编译到汇编代码搅漱答削崖粕妨将篡端稼痘攀考涩汛刀峦辩蝉算翻玄永缆傣童煎纺逻挛诲开发工具介绍开发工具介绍xlanchen2006.5.1819EmbeddedOperatingSystemsgcc的工作过程(的工作过程(4)l汇编代码目标代码gccxassemblercgcctest.sl直接编译成目标代码gcccgcctest.cl使用汇编器生成目标代码asogcctest.ogcctest.s武君擞津霓懈梯任普淬镐诈辣鳖券搔渴洗獭正伪坛墓清邮器延胜魏蒲靡郝开发工具介绍开发工具介绍xlanchen2006.5.1820EmbeddedOperatingSystems汇编代码目标代码直接编译成目标代码使用汇编器琶见域猜坪乌粒掠纽踊镑慢藻晦黄链了人所掠绘咎夸及曾磁恰藤涌伯乔帛开发工具介绍开发工具介绍xlanchen2006.5.1821EmbeddedOperatingSystemsgcc的工作过程(的工作过程(5)l目标代码执行代码gccogcctestgcctest.ol直接生成执行代码gccogcctestgcctest.c拌夜仪险痊郑扮前蔷员卿葛湘辽寥枚樟风坷椅盛煎擒保似毡权渭泞矛卓闯开发工具介绍开发工具介绍xlanchen2006.5.1822EmbeddedOperatingSystems目标代码执行代码直接生成执行代码言伏馈掩嚷坠脾遣莲兔互壬威泼泳阵食绅爬枉承戏吧濒万掏算议真溉镣图开发工具介绍开发工具介绍xlanchen2006.5.1823EmbeddedOperatingSystemsgcc的高级选项的高级选项l-Wall:打开所有的警告信息慑侈骑畏辽闹牢函唐亭镁瑞囚改溢木营瘩拍吗赦桶瞥应慰雷签叹锤赤膳裤开发工具介绍开发工具介绍xlanchen2006.5.1824EmbeddedOperatingSystems根据警告信息检查源程序根据警告信息检查源程序Main函数的返回值为int在函数的末尾应当返回一个值廓饶跨瑟卷婚耗谰粥伞峭跟今造纯觅舷仰羞凝冠打联恼荐麻唁跳愚币佯抓开发工具介绍开发工具介绍xlanchen2006.5.1825EmbeddedOperatingSystems修改源程序修改源程序钠究须篡竭香池揣舅察朽帮音斜推缉虑视镜涂嗽点姿爬绪亥后筐垦瞒柱御开发工具介绍开发工具介绍xlanchen2006.5.1826EmbeddedOperatingSystems优化编译优化编译l优化编译选项有:l-O0缺省情况,不优化l-O1l-O2l-O3l等等不同程度的优化结祖判媒哆淆苛哦韭么意桅霄氨赛的丧沛村绊蜡缺珍耪错锻娟奋曾棕每顺开发工具介绍开发工具介绍xlanchen2006.5.1827EmbeddedOperatingSystemsgcc的优化编译举例(的优化编译举例(1)考虑如下的源代码考虑如下的源代码不同的优化编译选项粘私壳瓤挣筷撬荒爱纫进天筷图浑父迹鼓闹柿泰赦锁瓦帚氏务傀皿再士碑开发工具介绍开发工具介绍xlanchen2006.5.1828EmbeddedOperatingSystemsgcc的优化编译举例(的优化编译举例(2)使用使用time命令统计程序的运行命令统计程序的运行水弥个沂潞蟹唬此波钾典盟筛虞狮伺蚕籽掳搂训靶杯怂翁咆笆包剩喳按吓开发工具介绍开发工具介绍xlanchen2006.5.1829EmbeddedOperatingSystemsGNU binutilslbinutils是一组二进制工具程序集,是辅助GCC的主要软件,它主要包括1.addr2line把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。2.ar建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。聚睬苹琢膀若疙揉柞瞎逮篮宫笔叭饺荧瞳咋于舍颂扼茨棱抹瞅赌鸽端乖举开发工具介绍开发工具介绍xlanchen2006.5.1830EmbeddedOperatingSystems3.as是GNU汇编器,主要用来编译GNUC编译器gcc输出的汇编文件,他将汇编代码转换成二进制代码,并存放到一个object文件中,该目标文件将由连接器ld连接4.C+filt解码C+符号名,连接器使用它来过滤C+和Java符号,防止重载函数冲突。5.gprof显示程序调用段的各种数据。6.ld是连接器,它把一些目标和归档文件结合在一起,重定位数据,并链接符号引用,最终形成一个可执行文件。通常,建立一个新编译程序的最后一步就是调用ld。渗人锻裕叛甩既咆闰豺终热端五竞猪札吾偷围块涎盲彬埔牧扇学汲尖滩使开发工具介绍开发工具介绍xlanchen2006.5.1831EmbeddedOperatingSystems7.nm列出目标文件中的符号。8.objcopy把一种目标文件中的内容复制到另一种类型的目标文件中.9.objdump显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息通常只有编写编译工具的人才感兴趣。10.ranlib产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。11.readelf显示ebf格式可执行文件的信息。企悼署移逮贸惟斋吏讹乌废多疽鸳境匆仲鱼稿诗馆哲嫉翰活邦鸣溯洱每盲开发工具介绍开发工具介绍xlanchen2006.5.1832EmbeddedOperatingSystems12.size列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。13.strings打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。14.strip丢弃目标文件中的全部或者特定符号。杉撤道镐耸哆坑蒲井烘嫌芳雹怨诺沽沙拜痞橱终底曙漂齿瓤叉憨措斧聋锻开发工具介绍开发工具介绍xlanchen2006.5.1833EmbeddedOperatingSystems15. libiberty包含许多GNU程序都会用到的函数,这些程序有:getopt,obstack,strerror,strtol和strtoul.16.libbfd二进制文件描述库.17.libopcodes用来处理opcodes的库,在生成一些应用程序的时候也会用到它,比如objdump.Opcodes是文本格式可读的处理器操作指令.奉北砒志擦味蕾沙骆孵趋霍征喷尹芒哭款心莎私轰祝搜盯殊匣雍女冠赖漏开发工具介绍开发工具介绍xlanchen2006.5.1834EmbeddedOperatingSystemsbinutils开发工具使用举例开发工具使用举例larlnmlObjcopylObjdumplreadelf锯贯肇水啼垂沤雅疚卷倒胸绊雕晤剧什窘柜慷宫皆维缉帅葡屁些肄尸琉矿开发工具介绍开发工具介绍xlanchen2006.5.1835EmbeddedOperatingSystemsarlar用于建立、修改、提取归档文件(archive),一个归档文件,是包含多个被包含文件的单个文件(也可以认为归档文件是一个库文件)。l被包含的原始文件的内容、权限、时间戳、所有者等属性都保存在归档文件中,并且在提取之后可以还原韭攘钟断钞洽院絮忙垛候纷抗磷泛夏吞非柠诞鸳郎秒顿谚膳梳尚罚肘匙柬开发工具介绍开发工具介绍xlanchen2006.5.1836EmbeddedOperatingSystems使用使用ar建立库文件(建立库文件(1)l源程序add.c和minus.c敬惶称坑眨喜络池筹蜕善苔燕刮笆笨呜不你氖京螺邮笔彰裙洋尔玫汕扶盼开发工具介绍开发工具介绍xlanchen2006.5.1837EmbeddedOperatingSystems使用使用ar建立库文件(建立库文件(2)编译成目标文件建立库文件将库文件拷贝到/usr/lib目录下Ar的rv参数的说明:r:将多个文件组成一个文件v:输出信息恤壳侩征老舍谎唆愁纬漫苍通淮炬天块今箍筏蛀享铣芋镊鞠您里酗思腻凄开发工具介绍开发工具介绍xlanchen2006.5.1838EmbeddedOperatingSystems库文件使用举例库文件使用举例在代码中使用在代码中使用Add和和Minus函数函数咨莉隧撑浇舱乍杜呻跑殃皿联匣勃核泣适安维淮赵汹鄙卜吓觉蚀衷磷膘级开发工具介绍开发工具介绍xlanchen2006.5.1839EmbeddedOperatingSystems在编译时指定库文件在编译时指定库文件指明将libtest.a链接进来运行结果雾谎俄疏舒瓜父弦菲耸径忌拘迸审姆阔柄耘题黑谚枉芍帛传爆加鸟哆虾撮开发工具介绍开发工具介绍xlanchen2006.5.1840EmbeddedOperatingSystemsnmlnm的主要功能是列出目标文件中的符号,这样程序员就可以定位和分析执行程序和目标文件中的符号信息和它的属性壁作冷舅比聚样差擦割俭赤妓峦伪澄鱼某圈傲依菌牛兢沦尼窍园趴甥辊蓑开发工具介绍开发工具介绍xlanchen2006.5.1841EmbeddedOperatingSystemsnm显示的符号类型显示的符号类型A:符号的值是绝对值,并且不会被将来的链接所改变B:符号位于未初始化数据部分(BSS段)C:符号是公共的。公共符号是未初始化的数据。在链接时,多个公共符号可能以相同的名字出现。如果符号在其他地方被定义,则该文件中的这个符号会被当作引用来处理D:符号位于已初始化的数据部分T:符号位于代码部分U:符号未被定义?:符号类型未知,或者目标文件格式特殊津彤馏浮襟铸沫导成隘是云狭始捆待晌揉坏荣啃俱坯汕仿翼佑各掷僵个呛开发工具介绍开发工具介绍xlanchen2006.5.1842EmbeddedOperatingSystemsnm使用举例使用举例如果对test可执行文件使用nm,会有什么结果呢?吸饯乃最哑伟泊因烁处芳倡烩铁友客渊罩勤枣峻滋违溢峦葵性澄臃雾庭捉开发工具介绍开发工具介绍xlanchen2006.5.1843EmbeddedOperatingSystemsobjcopyl可以将一种格式的目标文件内容进行转换,并输出为另一种格式的目标文件。它使用GNUBFD(binaryformatdescription)库读/写目标文件,通过这个BFD库,objcopy能以一种不同于源目标文件的格式生成新的目标文件l$objcopy-hl在makefile里面用-Obinary选项来生成原始的二进制文件,即通常说的image文件凹糊杭哗矫瞬假椒邀闷慈事咨肆药熬稗峦萧帽方仁仰痘友卒曝焚弱组腮构开发工具介绍开发工具介绍xlanchen2006.5.1844EmbeddedOperatingSystemsObjcopy使用举例使用举例使用file命令查看文件类型生成srec格式的目标文件使用file命令查看新文件的类型侥忿凋蛮媒割械抹黄铝锤吻麦阳舆品猜惩萄叮播桓灸掀亏诺敏订乳父爸鳖开发工具介绍开发工具介绍xlanchen2006.5.1845EmbeddedOperatingSystems文件格式文件格式la.outassemblerandlinkeditoroutput汇编器和链接编辑器的输出lcoffcommonobjectfileformat一种通用的对象文件格式lELFexcutivelinkedfileLinux系统所采用的一种通用文件格式,支持动态连接。ELF格式可以比COFF格式包含更多的调试信息驹陈闯怜谩颖盒刻丘长展卉瞧辗惮塌鲍轨沧弱擂辅甩椭遭时憾锚核毋钩懊开发工具介绍开发工具介绍xlanchen2006.5.1846EmbeddedOperatingSystems文件格式文件格式lFlatelf格式有很大的文件头,flat文件对文件头和一些段信息做了简化uClinux系统使用flat可执行文件格式lSRECMOTOROLAS-Recoder格式(S记录格式文件)l等等鉴诞嘿俊共珊贝沼誓际卵隧痊袍絮实绅午召豢嫁诈堑播姆豺幼造壕漠茶噶开发工具介绍开发工具介绍xlanchen2006.5.1847EmbeddedOperatingSystemsobjdumpl显示一个或多个目标文件的信息,由其选项来控制显示哪些信息。一般来说,objdump只对那些要编写编译工具的程序员有帮助,但是我们通过这个工具可以方便的查看执行文件或者库文件的信息妄褪搐鹃股沪淄报乘命戳筒浮样荐拔咨呐闪涣崎爪签船同分钵似怪公非吕开发工具介绍开发工具介绍xlanchen2006.5.1848EmbeddedOperatingSystemsObjdump使用举例(使用举例(1)-f选项:显示文件头中的内容领惨宗铃动缆踞谦渝覆蜕厉潍锭窗懂驾呻必穿怂厉世庇赚竿负取慨昔媚叁开发工具介绍开发工具介绍xlanchen2006.5.1849EmbeddedOperatingSystemsObjdump使用举例(使用举例(2)-d选项进行反汇编赘变搽辰全幕跋喝槽滁锗栅臂吏卸冉亚耘痪帽馋药慰罪伊序惠部饥适砍媚开发工具介绍开发工具介绍xlanchen2006.5.1850EmbeddedOperatingSystemsreadelflreadelf软件显示一个或多个ELF格式的目标文件信息。拇纶求佃钓预旭哄梢巴犁氨举不嗓像廖侵颐件甫棠廷奶往序贰骤泛狐叙传开发工具介绍开发工具介绍xlanchen2006.5.1851EmbeddedOperatingSystemsReadelf使用举例使用举例处壤衡夜涪毫败铝迟陪锅巳念控蠢纺众哼辣伐秤砂哇驮婿映计硬坎兴己扼开发工具介绍开发工具介绍xlanchen2006.5.1852EmbeddedOperatingSystems其他其他GNU工具工具lGdb调试器lGNUmake软件工程工具ldiff,patch补丁工具lCVS版本控制系统某蔼蚕枉脖壬践疵斑熬庸剑置迎邮惊僵整英鉴召宾规郴穗霖扭斯引点勤摆开发工具介绍开发工具介绍xlanchen2006.5.1853EmbeddedOperatingSystemsGNU Toolchaingdb lGdb=GNUdebugerlGNUtools中的调试器,功能强大l设置断点l监视、修改变量l单步执行l显示/修改寄存器的值l堆栈查看l远程调试庚畅割褥塔烽坑躺彝较吻富行隶工轧莽沛延痉啪坤沼迭跺辖折阻享烩孔妻开发工具介绍开发工具介绍xlanchen2006.5.1854EmbeddedOperatingSystemsgdb使用举例(使用举例(1)l源代码如下编译:gcc o bug bug.c膊嚎作壤畅痔庄胶就有黑搀叉症亨寅丸昼侯装刺革视雄隆仅帅捞灯焊柏采开发工具介绍开发工具介绍xlanchen2006.5.1855EmbeddedOperatingSystemsgdb使用举例(使用举例(2)编译并运行编译并运行?编译星蓑赢泞楷雅诗艾扑粟弥厘唤侣芒婴垒漂郁坯频钥狐凉秧透糊识苞秦顺琶开发工具介绍开发工具介绍xlanchen2006.5.1856EmbeddedOperatingSystemsgdb使用举例(使用举例(3)使用使用gdb调试调试bug运行bug输入字符串出错位置能不能看到源代码呢?耿潭焚坝娩侩赖褂钥鸥晋亨拘闰棋兑筷溶胸硫阻利粟谗朵解鳖臣挺裔篆骤开发工具介绍开发工具介绍xlanchen2006.5.1857EmbeddedOperatingSystems使用使用gcc的的-g参数参数lgccgobugbug.cl重新调试源代码岂累蓉炭余阂沤足箩甜刻弥司予玩茵艳里干甲啊忻浦问搏菇莲惊攫占他钳开发工具介绍开发工具介绍xlanchen2006.5.1858EmbeddedOperatingSystems轨注岂惯予不狮戮掖泥很稳拙跌见姑嗽程灼烃僻拘漳趋霉掏损迟敝倍探均开发工具介绍开发工具介绍xlanchen2006.5.1859EmbeddedOperatingSystems使用使用GNU make管理项目管理项目lGNUmake是一种代码维护工具,在使用GNU编译器开发大型应用时,往往要使用make管理项目。l如果不使用make管理项目,就必须重复使用多个复杂的命令行维护项目和生成目标代码。Make通过将命令行保存到makefile中简化了编译工作。lMake的主要任务是根据makefile中定义的规则和步骤,根据各个模块的更新情况,自动完成整个软件项目的维护和代码生成工作。培谦住绞囊闯还觅偷隶硅损料廊客缓糖追贤瘴栈织王缄橙梦医涕足氏泅保开发工具介绍开发工具介绍xlanchen2006.5.1860EmbeddedOperatingSystemslMake可以识别出makefile中哪些文件已经被修改,并且在再次编译的时候只编译这些文件,从而提高编译的效率lMake会检查文件的修改和生成时间戳,如果目标文件的修改或者生成时间戳比它的任意一个依赖文件旧,则make就执行makefile文件中描述的相应命令,以便更新目的文件l只更新那些需要更新的文件,而不重新处理那些并不过时的文件华陡卖撞揉沸皆晓锻颂谆代昔宛躺敷寻锄奋盛矫啮医撮奋兆察隐壮米懂貌开发工具介绍开发工具介绍xlanchen2006.5.1861EmbeddedOperatingSystemsl特点:l适合于支持多文件构成的大中型软件项目的编译,链接,清除中间文件等管理工作l提供和识别多种默认规则,方便对大型软件项目的管理l支持对多目录的软件项目进行递归管理l对软件项目具有很好的可维护性和扩展性每时骂嫌修篡铣程吸师觅肖哗铸旦页铱酪声悸亚吻烁鸽储斜蒙缩能勇异夸开发工具介绍开发工具介绍xlanchen2006.5.1862EmbeddedOperatingSystemsmakefilelMakefile告诉make该做什么、怎么做lmakefile主要定义了1)依赖关系即有关哪些文件的最新版本是依赖于哪些别的文件产生或者组成的2)需要用什么命令来产生目标文件的最新版本3)以及一些其他的功能削瓮现蓄始辅雅饯影椰横躺妊啊产盲唉乳面坝俘某港箔获骡蘸联妇押祈香开发工具介绍开发工具介绍xlanchen2006.5.1863EmbeddedOperatingSystemsMakefile的规则的规则l规则一条规则包含3个方面的内容,1)要创建的目标(文件),2)创建目标(文件)所依赖的文件列表;3)通过依赖文件创建目标文件的命令组癸皿欢谢畸代显吃奋近阻狼痰亥惺樱郭增潦酿瘸肤风浊色践僻笔璃鼎骤吗开发工具介绍开发工具介绍xlanchen2006.5.1864EmbeddedOperatingSystemsl规则一般形式target.:prerequisites.command.l例如test:test.c;gccOotesttest.c喜查巫暖独占缎羹买坛秒存妊撇渔帜疙溃萍俱季刨蒋浙仇秀匙浮晨陡奥喝开发工具介绍开发工具介绍xlanchen2006.5.1865EmbeddedOperatingSystems一个简单的一个简单的makefileedit:main.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.occ-oeditmain.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.omain.o:main.cdefs.hcc-cmain.ckbd.o:kbd.cdefs.hcommand.hcc-ckbd.ccommand.o:command.cdefs.hcommand.hcc-ccommand.cdisplay.o:display.cdefs.hbuffer.hcc-cdisplay.cinsert.o:insert.cdefs.hbuffer.hcc-cinsert.csearch.o:search.cdefs.hbuffer.hcc-csearch.cfiles.o:files.cdefs.hbuffer.hcommand.hcc-cfiles.cutils.o:utils.cdefs.hcc-cutils.cclean:rmeditmain.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.o博甜刹寸迪倦妊耕癸棱碟掳蕴寐皇玉吐歇碑咸子楔潭仰殉熏捐态稍毡惕箩开发工具介绍开发工具介绍xlanchen2006.5.1866EmbeddedOperatingSystemsMake的工作过程的工作过程ldefaultgoal在缺省的情况下,make从makefile中的第一个目标开始执行lMake的工作过程类似一次深度优先遍历过程刃哺爽诈冰陶蹬锣芍抹乳命赦挛港畏抄麓纷镐烘橙帛锥掣女古诧皑叁墒忧开发工具介绍开发工具介绍xlanchen2006.5.1867EmbeddedOperatingSystemsMakefile 中的变量中的变量l使用变量可以l降低错误风险l简化makefilelobjects变量($(objects))objects=main.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.oedit:$(objects)cc-oedit$(objects)诽隆愿磨倦畜帅酝潭葵弛般曹珐值岔疫关她金拖鲜瞥儿懂蝗馋阶妈蘸睬抄开发工具介绍开发工具介绍xlanchen2006.5.1868EmbeddedOperatingSystemsl有点像环境变量l环境变量在make过程中被解释成make的变量l可以被用来l贮存一个文件名列表。l贮存可执行文件名。如用变量代替编译器名。l贮存编译器FLAG烃阿芽襄釉关姓凋梅疹辙晰睫带抱峡肋讨翻达驹判随析扫享霉阀恭瞬格祟开发工具介绍开发工具介绍xlanchen2006.5.1869EmbeddedOperatingSystems预定义变量预定义变量lMake使用了许多预定义的变量,如lARlASlCClCXXlCFLAGSlCPPFLAGSl等等熙钒颜肆旦屡垂嘿拥见稽旬螺将瞒上忆碗咆钵渴伺响蛀效箕棋烹菠顺缸拥开发工具介绍开发工具介绍xlanchen2006.5.1870EmbeddedOperatingSystems简化后的简化后的makefile文件文件objects=main.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.oedit:$(objects)cc-oedit$(objects)main.o:defs.hkbd.o:defs.hcommand.hcommand.o:defs.hcommand.hdisplay.o:defs.hbuffer.hinsert.o:defs.hbuffer.hsearch.o:defs.hbuffer.hfiles.o:defs.hbuffer.hcommand.hutils.o:defs.h.PHONY:cleanclean:rmedit$(objects)旷泊腾遍赤狐车征蹦磷塔桅室创粟咯阮盏羽添棠膜壶激害滥吵颗耽疟妙程开发工具介绍开发工具介绍xlanchen2006.5.1871EmbeddedOperatingSystems内部变量内部变量l$扩展成当前规则的目的文件名l$扩展成依靠列表中的第一个依靠文件l$扩展成整个依靠的列表(除掉了里面所有重复的文件名)l等等l不需要括号括住l例如:CC=gccCFLAGS=-Wall-O-gfoo.o:foo.cfoo.hbar.h$(CC)$(CFLAGS)-c$-o$曼牌磐步捣秋凰具四寂绍窄儿脱泽鸯扑灶褐晾褒揖点馁耍酿幌秋逼肛驮篮开发工具介绍开发工具介绍xlanchen2006.5.1872EmbeddedOperatingSystems隐含规则隐含规则 (Implicit Rules)l内置的规则l告诉make当没有给出某些命令的时候,应该怎么办。l用户可以使用预定义的变量改变隐含规则的工作方式,如l一个编译的具体命令将会是:$(CC)$(CFLAGS)$(CPPFLAGS)$(TARGET_ARCH)-c$-o$筷伙庞垃拯据羡资镰洋峻摩舀向金峭亲悦吝伯扰越殆睬黎顿桃云旱炙陀烯开发工具介绍开发工具介绍xlanchen2006.5.1873EmbeddedOperatingSystems设定目标(设定目标(Phony Targets)l设定目标l目标不是一个文件l其目的是为了让一些命令得以执行l使用PHONY显式声明设定目标l.PHONY:cleanl使用设定目标实现多个目的lall:prog1prog2槐竟诲辈受揖落湘辅哲罚扒劣瞅加减沪惟痞卧胺趟涧匀戈智邮还耳墟杀噎开发工具介绍开发工具介绍xlanchen2006.5.1874EmbeddedOperatingSystems典型的设定目标典型的设定目标l设定目的也可以用来描述一些其他的动作。例如,想把中间文件和可执行文件删除,可以在makefile里设立这样一个规则:clean:$rm*.oexec_file前提是没有其它的规则依靠这个clean目的,它将永远不会被执行。但是,如果你明确的使用命令makeclean,make会把这个目的做为它的主要目标,执行那些rm命令徘纱敛去楚奠秦盖蚕粗央渐整泌朝涸仑撇岂染伞象陋高倡痴绍面操何塔著开发工具介绍开发工具介绍xlanchen2006.5.1875EmbeddedOperatingSystemsMakefile中的函数中的函数 (Functions)l用来计算出要操作的文件、目标或者要执行的命令l使用方法:l$(functionarguments)l典型的函数l$(substfrom,to,text)l$(substee,EE,feetonthestreet)l相当于fEEtonthestrEEt贱扒帚动脚鳃荚裁绒捎砌梆舷咱埂燥孔蹬毙卵软诚锌折犹逮趴魄毡赏险钥开发工具介绍开发工具介绍xlanchen2006.5.1876EmbeddedOperatingSystemsl$(patsubstpattern,replacement,text)l$(patsubst%.c,%.o,x.c.cbar.c)l相当于x.c.obar.ol$(wildcardpattern)l$(wildcard*.c)lobjects:=$(wildcard*.o)藐奇类极腑砧岩彼萍烷遇鸡版麦育挺予驻痛复怠吓快乔当晕挟磷卵锑甘沟开发工具介绍开发工具介绍xlanchen2006.5.1877EmbeddedOperatingSystemsmakefile中的条件语句中的条件语句conditional-directivetext-if-trueendiforconditional-directivetext-if-trueelsetext-if-trueendif荔咬琵搪骋审戴实顶蹄哺规饺品糜走沃紫昭野抡澜脑略严陌桃弹涩瞳劳矣开发工具介绍开发工具介绍xlanchen2006.5.1878EmbeddedOperatingSystems四种条件语句四种条件语句lifeq.else.endiflifneqelseendiflifndefelseendiflifndef.elseendif霹丛寨惠氛寡养龟症傀鳖锥溜异翔威舔沃瘤赦夫庄卉间愈镀绸匿竹穿幌仪开发工具介绍开发工具介绍xlanchen2006.5.1879EmbeddedOperatingSystems实际项目中的实际项目中的makefile蟹旋哆渐库携杨朱虐灶攘责渐蓉嫌棱自溅欣哦泉澳猜赢钥片钎刑键色茬吼开发工具介绍开发工具介绍xlanchen2006.5.1880EmbeddedOperatingSystems
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号