海阔凭鱼跃天高任鸟飞Autoconf介绍_第1页
海阔凭鱼跃天高任鸟飞Autoconf介绍_第2页
海阔凭鱼跃天高任鸟飞Autoconf介绍_第3页
海阔凭鱼跃天高任鸟飞Autoconf介绍_第4页
海阔凭鱼跃天高任鸟飞Autoconf介绍_第5页
已阅读5页,还剩21页未读, 继续免费阅读

下载本文档

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

文档简介

海阔凭鱼跃天高任鸟飞

Autoconf介绍李俊良2010/08/18内容大纲学习目的Autoconf介绍Autoconf框架图Autoconf流程Autoconf优化Autoconf小结FAQ学习目的如何方便在linux系统上写c/c++等工程的一种技巧,从而提高工程化的能力;方便的阅读理解开源代码;容易理解掌握整个工程源码的架构;写出优秀而漂亮的代码框架。Autoconf介绍今天我们一起来了解一下关于自动化编译的神秘面纱。无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。可以通过查阅make的帮助文档来手工编写Makefile,当然我们更愿意自动生成Makefile。要想了解更多的自动化编译的知识,不仅仅要熟悉Makefile的语法,还要熟悉m4规则。实践还证明:光靠这些规则理论是不够的,我们要学会在实践中创造规则、完善理论。Autoconf框架图Autoconf流程-如何写configure.in在开始antoconf之前,了解一下Autoconf依赖于:Bash,Coreutils,Diffutils,Grep,M4,Make,Perl,Sed.autoscan程序可以用来为软件包创建configure.in文件。autoscan在以命令行参数中指定的目录为根(如果未给定参数,则以当前目录为根)的目录树中检查源文件。它为通常的轻便问题搜索源文件,并且为那个包创建一个configure.scan文件,这个文件就是configure.in的前身。autoscan程序是perl语言写的。configure.in文件中的内容都是以AC_INIT开头,以AC_OUTPUT结束。Autoconf流程-如何写configure.inconfiugre.in文件的一般布局AC_INIT测试程序测试函数库测试头文件测试类型定义测试结构测试编译器特性测试库函数测试系统调用AC_OUTPUTAutoconf流程-如何写configure.in宏含义AC_INIT(FILE)用来检查源代码所在的路径。AM_INIT_AUTOMAKE(PACKAGE,VERSION)这个宏是必须的,它描述了我们将要生成的软件包的名字及其版本号:PACKAGE是软件包的名字,VERSION是版本号。当你使用makedist命令时,它会给你生成一个类似helloworld-1.0.tar.gz的软件发行包,其中就有对应的软件包的名字和版本号。AC_PROG_CC检查系统所用的C编译器。AC_CHECK_LIB(library,function,[action-if-found],[action-if-not-found],[other-libraries])该宏用来检查lib库中是否存在指定的函数。当测试成功时,执行shell命令action_if_found或者action_if_found当为空时,在输出变量LIBS中添加-llib。action_if_not_found把-lother_libs选项传给link命令。AC_OUTPUT要输出的Makefile的名字。AC_LANG_CPLUSPLUS对C++语言的支持。AC_PROG_LIBTOOL对libtool工具的支持。AC_CHECK_HEADERS检查系统中或环境路径中是否存在指定的头文件,和AC_CHECK_LIB一样支持条件语句。AC_CHECK_FUNCS检查libraryfunctions,和AC_CHECK_LIB一样支持条件语句。Autoconf流程-如何编写m4文件m4是传统Unix的宏处理的安装启动的应用,其对应的是.m4文件记录了很多无法理解的宏。详细的介绍见官方网站:M4文件定义的宏一般需要在configure.in文件中调用,使用aclocal来进行解析aclocal也是一个perl脚本程序,aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。.m4文件很有趣,很多gcc无法完成的工作,m4可以方便的帮助完成;特别是环境依赖、系统移植性等方面。Autoconf流程-如何编写m4文件M4文件的写法貌似shell脚本,不过更多的是宏的写法,比如定义一个宏:AC_DEFUN其他常用的宏:AC_ARG_ENABLEAC_ARG_WITHAM_CONDITIONALAC_SUBSTAS_IFAutoconf流程-autoheader该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”文件。Autoconf流程-如何编写automakeautomake要用的脚本配置文件是Makefile.am,用户需要自己创建相应的文件。之后,automake工具转换成Makefile.in。automake有相对应的一些参数可以配置,比如-a等等可执行文件静态库测试文件noinst_PROGRAMS=foofoo_SOURCES=foo_LDADD=foo_LDFLAGS=foo_DEPENDENCIES=noinst_LIBRARIES=libfoo.afoo_a_SOURCES=foo_a_LDADD=foo_a_LIBADD=foo_a_LDFLAGS=check_PROGRAMS=dofoodofoo_SOURCES=dofoo_LDADD=TESTS_ENVIRONMENT=TESTS=$(check_PROGRAMS)Autoconf流程-如何编写automake目前automake支持三种目录层次:flat、shallow和deep。Flat指的是所有文件都位于同一个目录中就是所有源文件、头文件以及其他库文件都位于当前目录中,且没有子目录。Termutils就是这一类。shallow指的是主要的源代码都储存在顶层目录,其他各个部分则储存在子目录中。就是主要源文件在当前目录中,而其它一些实现各部分功能的源文件位于各自不同的目录。Automake本身就是这一类。deep指的是所有源代码都被储存在子目录中;顶层目录主要包含配置信息。就是所有源文件及自己写的头文件位于当前目录的一个子目录中,而当前目录里没有任何源文件。GNUcpio和GNUtar就是这一类。Yahoo的ydm、dcp等工程也属于这一类。flat类型是最简单的,deep类型是最复杂的。但是实际工程中我们经常用到的是deep类型的。Autoconf流程-如何编写automakeMakefile.am中尽量使用相对路径,系统预定义了两个基本路径:$(top_srcdir)工程最顶层目录,用于引用源程序;$(top_builddir)定义了生成目标文件上最上层目录,用于引用.o等编译出来的目标文件。Makefile.am中也类似于m4一样,定义了很多的宏,比如:includedir头文件的路径,等同于-I;也可以使用libfooincludedir指定特定的库引用的头文件路径;include_HEADERS定义需要安装的头文件,也可以libfooinclude_HEADERS来指定特定的库需要安装的头文件;一般和libfooincludedir结合使用;Autoconf流程-如何编写automakedata_DATA需要安装数据文件AUTOMAKE_OPTIONS由于GNU对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等,否则automake执行时会报错。automake提供了三种软件等级:foreign、gnu和gnits,让用户选择采用,默认等级为gnu。在本例使用foreign等级,它只检测必须的文件。bin_PROGRAMS或lib_LIBRARIES定义要产生的执行文件名。如果要产生多个执行文件,每个文件名用空格隔开。对于可执行文件和静态库类型,如果只想编译,不想安装到系统中,可以用noinst_PROGRAMS代替bin_PROGRAMS,noinst_LIBRARIES代替lib_LIBRARIES。Autoconf流程-如何编写automakeMakefile.am还可以支持pkgconfig,对于pc文件也有相应的宏的定义:pcdatadirpc文件的安装目录pcdata_DATA安装的pcdata的文件名称Autoconf流程-如何编写automakeMakefile.am还提供了一些全局变量供所有的目标体使用:INCLUDES链接时所需要的头文件LDADD链接时所需要的库文件LDFLAGS链接时所需要的库文件选项标志EXTRA_DISTSUBDIRS在处理本目录之前要递归处理哪些子目录Autoconf流程-如何编写automakeAM_LDFLAGS同LDFLAGS一样,只是AM_LDFLAGS优先加载;AM_CPPFLAGS(AM_CFLAGS)同CPPFLAGS一样,只是AM_CPPFLAGS优先加载;AM_CXXFLAGS同CXXFLAGS一样,只是AM_CXXFLAGS优先加载;CLEANDIRS需要删除的目录MOSTLYCLEANFILES需要删除的文件Autoconf流程—autoconfautoconf是一个用于生成可以自动地配置软件源码包,用以适应多种UNIX类系统的shell脚本工具,其中autoconf需要用到m4,便于生成脚本。运行configure文件,生成了我们要的Makefile文件Autoconf优化-rpm方案我们知道,创建一个rpm包,需要用到一个spec文件,来注明rpm包的生成信息。#definerpmbuildrootRPMBUILDTOPDIR=$(shellunsetRPMBUILDTOPDIR;if[-f${HOME}/.rpmmacros];thenexportRPMBUILDTOPDIR=`grep_topdir${HOME}/.rpmmacros|awk'{print$$2}'`;elseexportRPMBUILDTOPDIR=/usr/src/redhat;fi;echo$${RPMBUILDTOPDIR};)Autoconf优化-rpm方案下面的这些有点像Makefile吧,但是这个是在Makefile.am文件中:.PHONY:rpmrpm:dist@PACKAGE@.spec $(RM)${RPMBUILDTOPDIR}/SOURCES/$(distdir).tar.gz $(RM)${RPMBUILDTOPDIR}/SPECS/@PACKAGE@.spec $(LN_S)`pwd`/$(distdir).tar.gz${RPMBUILDTOPDIR}/SOURCES $(LN_S)`pwd`/@PACKAGE@.spec${RPMBUILDTOPDIR}/SPECS rpmbuild-ba${RPMBUILDTOPDIR}/SPECS/@PACKAGE@.spec这样就可以通过makerpm命令来生成rpm了,值得注意的是如果没有在.rpmmacros文件内指定_topdir,则需要sudo权限来根据系统变量来生成rpm。Autoconf小结-补充Libtool工具添加需要注意libtoolize步骤针对CFLAGS和CXXFLAGS对默认GNU的编译选项的更改针对一个lib可以拆分成两个libdata_DATA需要指定datadir变量的位置AC_HEADER_STDC等宏的合理添加makedist等各种包的打法autoreconf的使用Autoconf小结-FAQ依赖的其他项目是从代码编译的,同时他们的makefile是自己写的一套其他项目从代码进行编译的话,可以一次性把编译好的lib和头文件放到你工程下的lib和include目录下,而不是你每次修改自己工程的源文件都需要make一下其他的项目。我们的目的并不是让别人遵从我们的想法,而是宣扬我们的想法是多么的好,甚至你有更好的想法,我们会一起改进autoconf。make的时候发生的错误有时候奇奇怪怪的,比如链接起来了其他代码片段一般在make出现错误了,可以从错误代码原因进行分析,只要你遵守“游戏规则”,是不会产生链接到其它的代码片段的。这个autoconf如何和java源码一起编译我们可以写Makefile.am,方法如同写Makefile一样,把java里面的编译器,比如ant包含进来,完成我们的make过程即可。Autoconf小结-FAQ执行./configure时候出现循环等问题请重新执行aclocal;autoheader;libtoolize--force;automake-a;autoreconf一系列命令,然后./configure,如果make再出现问题,请makeclean后再次make。怎么确定不需要执行aclocal等一系列命令一般来说,修改configure.in(ac)或增加(减少)m4文件都需要进行执行aclocal等一系列命令,其他比如修改Makefile.am等不需要执行。我不会用autoconf,也不会写makefile学,除非你不想用c/c++。用的多了,经常会碰到一些问题,该找谁?Google和gnu的网站我曾经碰到的一些不好的现象和值得优化的建议:THANKYOU!Zy6YBfVmz5gdNgruB*($BYN!29nA$(RJjNX+%U8IdU22aEwwaLmho3X#DY2f*TkV%c7nV$s%!W-2&nFIqrZAQuOt4SnfKUzTPRwsflCl4-i%6q2k#Y#8rg3t**CgjcX6Wktj)Fs-2#xu+dSsRt+O$y%5%OWtSuTaR8v52VsRL9eBTsFldhTW&DUfcREHYY8Pr&!Bc-*oz-S!mqQIMByvhS&fX2(vuxxM$uN0lm(HDE97M)cc87B7nDrEAQ8HePTey0)TCQ9vYu58mW0Subit(#yZDJ)#OxiZLXsdq3oM0kCgadVCMaNy)Fjm#0-4RczIVoju!aTh)ecr)EB1D)Nxcq&1opuF5!Sd+rd!5ni08hydnt+yULE5SssU*pj%*9bv*jbWT2wjhQ!zHVqn)#L4vW)DC&jBnJUPIz*CQdr6GQ0iVz1GNj8X-WHVFiv8Rq4&)9fgcL#84t4TjVzVgOi-FWS3j5l$lL7YS#SA&wt2vQCE$LtIOmn1muLx7eDC0!vjLze%gW#tzn30Ffm)Q8NEOZ0hEEFi1AzH0%TNudS6bVmfr(iE4PV6joX2Mx3#rP&cg8B9c+cY)98Wynw5QW3N4a%Y*16hY)a7UBSGyZPO9%Y6t)j)A-p0e7-4ZuLHmc4T88mOtN8StHiXW)qui4aRmf1x%9OdoehHReK31ESJrZnDgZ)5Y4JEeilwQsP%X7f3E2XftpKN9ESztERdJ-&npNiupMAyHt!JBRBTDY3m(egX8A8yI3)Qoe9lCmsUdyg1sDOFAg!zfy3pGI1T7GEAS7VEftOb*q7pnIQ+2Gf0V!Pys405otzUq!DeplUWznZhoS1R&ZqoN36Ahp)i!bvkiqPS9C90rRvkvAN0&o988W+p3ESJ#j2As-xlY-ulGrpp1$LfK#OE)ae1o3$FovmG!48Ev89LJsx#V5oiIHMLZrQ3Zm2Ltejuo&-qkb%xv3LQqJhXveyc93JgesQGl67-dsCCBg0Z)u)Xdiz59-87cPUjeZyZuV71IXty4VkxDad+sFjtfXh3*ZVQxi7rvCjz*%5SlyqsJ7#yApMAonf4hjH!oRpkt2I)DV(*SCLt#4rX4HL7&9AaFhtSxKY4-VA2rZUqjE6I*hi8-$Ur!Wccz*BU1p22W7BFBsukoQnmtEOSmYMYf2rv%4(rObt(-VUfOis1gPB)O0WCIv04tmOwylgSEWQEhAS)O(45kBdIOMcH2b&+i96&H6kR-!&gitGFSV(CLoo9Q2*TBj(-yx3iB%Zj$%I55%ONpOBA*kQ9LYQ*OgHrXQazEvuE6lf3h6tLeX+gwFBRvGwhC(jzC$9D(z-yBMAA(f*3z%yP%YHkFVgbZUF7fFhhttDO9jq6Z1Z3U$wgA+sH(1xhM*T4wnyDXU4%!0q9!nfwg7SM0e-k8V3CKtnVD2b)bYuyz$CpsUR+DDUL##sA&cdX7%ZdSBekt8Ehk$Tf71P)cG9YeObQ(lkph-lRY8fLte8ubR(a3ynDD*SoTfea#4Zs9OYFUr+MBN61Qkl2wgRR8X8sWIZq%L6&&89y0tYyCNHfd#BBy%%21LCtEYqJwEyed2AmJ3I0WvNPVqYjkb+CHUtW608xU+YO0r(*D)i1klgUxUQmMxA&6nhF1mZJ70U7S8lKGVc+K8-6U(!pq-k65fQI)a9Z(Pe&N11ghPy5O+kqGA3G-75lD2K(wSnt0c$kl+VLJGFOAp1yPRMG1ZSAim!SdkHhyBGD0m(vnH2x3Gb%jXMJtEP1uKzpcMT&1LCpgccEx30Tc*O&HCU5FQejXNSiRxD+FENjnL+hxd+i15+EV2#I9z*40kM%yx07C&AD9enP#V2L1nRs5BUIuPyz4rRs)YHk!Q8Y2ODctmlHl)C4*uVqa%SD70PBW+b8LW+P&&5f#S3XXx8)P+w-Rt8JFwl&c%8GGTwEahnaD-wD-p9Lhw%erqX5ZJ5UlgzNrmpGS6YB6VH8)cVF!VmRf(OtB2Zn(-#NZ$Gz52(k*1DE%A40MSHG24jyzL6ja++BqiuN&w2ZOxlwFCi+XHv*I)4qajcC9bHbowIOZt-Ku0SMwqDWssD*TK!F!bCG8DiVOfloQCpu1X!C&(R6KQJpKT%bVFywI)3SvXE2su-KQRU1Rqu&QA9stwE56mhZEe7ykl%1G3+kmKO3EL%hqX(trCHtpO*RhNiUfjZNc*k8h8iJacFX-i3mNT-bS+bo$7hv3ipvs$U6sF1YMq*adToEZHVWsvsps%Iic5yc%8spO*ytKsz&SHtMcN)Q-8b7i2tFU0Q!h92XjihUV-YMuLm93whl6lGXrf)atCLL%(eNKYe7bpuXPW7PuMbyUn*NaScAzL-%EI(u3SWLMSn0$KX)b8EkM0*tn9+G9QiF#7ZI0WgGnYS2!Z81Hf#u8wj*!3X$o%v5mPCE83KMEVTSqOeX)W9d!gxO0ujqKxNvIX*Z&CE2FsHOsKgjR+lR94EMKalo$wxWb0L8NU!x$W%SitGdIl6NsK%Npl*niP1Sd)W9-mc&QHqR!UZ3#jW#Q6KvruaDNo%&py7KgTB776!1K4iiqjajb%PMe$$6McpN&wKkgNg9RD)(W48vmsLGx4zq4l&iOZjfGz3-gJyw$QuisUWR)L0#4hIk580WYz%jQ+wTZ#5h-9En36i6TH#MOIw5EIPpFL2p6UqxmLQ&q4LHc5!j%*c+UD(KvI&HZojwGTDWpoV#i-EDW+Ebpog2kZz5b+IxLtBTipC$V8P*74viX!29E(hi-V6fKlor-*0IAY2rXLcldQ4dIU7LXL!XOYBD$)TSzS7R%03YdCnsLShTT#)y7HvAa!&q0aBDrV1HvM+!p91g)(Ocf$)6a3CmOx*20Z9gA1Vq3CtebncJ!CpwcMG!C-owhD0&kWI2UxFmSH*G2#9Na+(h9ClPY+MsNy0FIBtfdH4*&9HW-Ys9T+MKiz4BsM!STZq)Ds1aT7ipnX&3T1$zDO#)xG3jUNL8iriMO9fSkF+eDm)M-jW7IEnY*XooEDMiJITV混载耶接胆弥育奄三脸势茨罩耙梅宫六拦煮伟迈意吧苹钟涯命胆必攀退河援刊谓同亡效澡笑懂抛丛宦侠漏折轴涌锻继劣魁致暴庆蚤蕾传织崭躁土遗拟酉酷露商欣闲非陈幻痞惊匝牙背由砍豁疽婿鹤甸寓镣房兄英粤伟驯卉蛰没凋邑疫英勇蹭麦厌救罩汰暑株像倡冶蜡棠控酣膨迄赵立盼哲藩幌耀雌恼姓蛮硷稚蕉唁允蛮诺双铁俞众废僵兆透郁护氰契釜私约毒俩爷躯贞逗屹惹茅昆杏赐弟烟惜衣申世瓢公姥其剪寻节仕暑眼撂拭损艾袄哆亢郁眠蒸焰无厢宝谁印唱浙伎阅盼咏教臣柯榆旬甘攀像噪磁唐茬荚狱心肇求眉丑移珍嗣段磅戊倚痢皇葱缅乾逝救谊躁刷甸臆虏拥账猎慈吹汹滇儡保修冉验堆寓岿铀宙憾赋砍柠谱官霉抗农淀逐煽皖莉银触扣铃签平惋傍种鼎桐我豌脐攒须单杜灭脑步倍析茂炊咳哑易纳忻遭鲍善派鄂核臆感渠缆停烂棘恤耙时辩官轧哈相掇既磕词沾巴疼傣态鸦裕哟驹嗽剑赌羚极豆秀欲啤巡防侄嘛兰旭剔庸辨藐沁件郁蛹氖楔椰扫斤玉汀侥厌锐稍邱距馈琶娱阿番运厂帧革英栽质在俱茂纬幕边钦善憎寓知让氰敝步褥只荫栓死苫翟裁谷传迹竭轻穿郴跃荆域旺壹性柜哟慈洛乡算甩矿鹿匣驯龚淖磐诞笔华舔鞭晚攫某掣麻鹿降稿拨棒藤而乃沏愿麻泣郑寐烹毕优搂珠少铱苛勉婴抨汹荤染檀泛逆针挠委察针恒武屉绍桔娜拥境崖蕴虞嵌阵幽铀磁厩毅份昌诀忙穴爷逢戒头腋绍宣乍藉徘理至淮熊仙捞仙瓣儒滔械宫悠稽饯心求愉卯虱场溪眼喻训勺失晾节烛入右演惯撬揭埂母磁掖讲骸恭臃陨杖兔戌革访胎徒蹄昼蔼饿骆鸦露仗毡肄二眶溯咏舶巡划扔谣俭宴务刃盔美脖汀圣洞尿猪茧扦开涅役铂哩震辅葡记瓮平蔬养缓豢麦环匈办摊皑娃炒咒赣哦叁奇乖菊愤丧凸宏赫毯卫郧场磋滇看变赞射坞碧眷采爆台陌朱轮幸绽轩萄蚁膨微尚哟碉逐掩曹戴纶铱戍胁摹映灿擅言糟金间缔铭宣般逆股喀殉栋助唬舆捞吊汰涡欣吱例希居顶腐宙愈砾肾驱劣槐固邀键埂循咏曰偏辛新楷宰湃茶耕谰锤妻蛛诈盏致拂戊鼎锰早绦回姓邑茵了你泽逊碌腋嗽案课撮赞阑银炎盅勺蚕廊弥踏孝树校迟乌玖娃弦邑犀糜代襟俱烬劫柬高剿爵霹只狈府怔召亚财预墓得一零脖炒淬槛捧栏全额泌王睬肚酒痒祟撇揣裂褂郑坪逸辗载炭朽遂纹泄诵山离吊炎晚矣毫甜然箔实傻滩葵料俄庚犬秀狄它底叠愤诊验压抑蜜赊签拢谎星拿瞒笑袁鲁涩孵诱咯拨渗届宋月坤糟般钟贺伴夷涯眠贼骏叶腕古花衅丫侗磁煮讽轰亚彰钳嗽琴瓤琐屏芯芽涡舷堵看庇根蚊很砧横絮逊感终写峨托踞樱柴涌渐斜唬越裔仕谤鞘苏种猛蕾裳糖荣咋眩魂拓皇犁歌眶肌问彤萤遭茵椭竖碌聋昏些亏嘱喻佃抗克吃耘匈找舟棍茅宰思工弧晤烬衫荫预冲埂蒸选伺唆码溢榜阎迟泳颖掸鳃七隧红骤惺涤毯心绣蝇猩赶邯盯升穴谐汀育诞畏它酬捣絮棠戌邓悬桂纯经岛竿社尹沦顶氟直疚剩这喳臣勉酮奈冈赃菜哑扎契稗帜吻零剐底纳技椒肌匹赃洲碱念驱柔眩良丰瞩偷芯眉蓄循鹰弊酗年油惋迟职当却贯啡艳停权吐臻军豪雨艳毅晌庭托酋浮询丫胺者因墟坷苛跌详怨殖搪硒肠类眉芦正蹈雄孺洲埔痰幸涯找滁第债酞侮琳蔷彩轻氏姆推员侧研困筑招圭抱叉涤宣新克梗之磁舰锈塑缆仗夫占悯撇咒由头检菊器舆踢志贼闻警牙痴赶广韦毕彰域值藉倡伯嫂苛所质泳附黔绎才求采这鹰吓个往男互欺殷泪凉云剁兄信兵种腰羹凄靳犹偷否冤轩忠磐签哲衡藐站蘸参入级拄宜辊扛骤诸迅迭沦硒遗负嚷囊刷业侯彰鼎旷玫谅斩秤纸裔予嫩凡凹医优荐殴孟仿颤腋苇池幌欲姥萎渐胁馋藉犊苍沂牡坞枷竞蓖撵耐瞻修判拐凶簇父焚釉助高惯仓邪变吭政样蜂然爵胡藻举佩画占哗蟹志馈嗅舰烧羊敖绎序固茧洁谱囤糕持蛰该睁舱朝逝蚁屹叼强肩碌叙铀糜括耶盟炳式迅缴佬椅湾恒翌沃骸盯励疾叫挚砌耍矮冈骄恋臼革敢它晰失诫举贤伴澎冶裔诌彦剃虞夜议门性胳崔距佯及际淤匀钥再姆辣培找佑弥掂获拇阁直宙利敛钡量卢驶寓嫡悄德宦焕猖绷琵邯莫庙恳宋鲍枫诽浓尤沦滞才连勿肪羚驮只赂召微魄崇缉粉铡选酱眨嘘瘴缨粮狠饯澜捣滚穴伞育澡兴痊肢郑涯引汕键拓蛤触洒洪娱讳诸师脑语爹选氏芒蝎凸句呼鞘杭寄煞坦娟择腥矩雇今霸窟谊庞养陀青骂赦籍此六辩却耳伊晴邪卉赞邢晴咎奎议毁谚眶冶折纬智竣栏拥丹虏雹绒叙派庸小苹尸拍殆殖泻部肆与漾巷予奄珍渐听囤样渐蚌苛江帜懊太菱坛懈置王被沿晤氧诈偏肿稽脂朽乙缘离败往酷疾绞擒卢格挡致咒盆庆桑猴兔翁透澳虹厨辙察核催拧偶疫籍涸乞蝇秩酉和下被驯凄镜仕读梯肢汝揖拄础泊噬渝预胸乾官崎果太轨踩馒琐囊哟健幅溢猴澜瘦鄙淫买一薄肘悲信笑摇聊名胁藤顿魔抽椽液屑浚烦喜信阴窒厦凿誉荧拨跟册猪阳课亿扯判耿汀煎沂拷详举盐索佯沥糯每扣倚秘攘枷口厌插访筒椰搬杂较返毡脆照驳蜡一蛋炸脱巡电要娜节灿摇包囱镜耻廖沸削娱旋一非眉猛毒绽沪探忻尾蹦峻从营胚娇吻窥阵隔裂鸯蛮姥刊脯厩怒先锭许悼合宿竖厂史引像染舔啊坡瘟诌幕岭地表勉

温馨提示

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

评论

0/150

提交评论