??xml version="1.0" encoding="utf-8" standalone="yes"?>
一?二者的n
作ؓ(f)世界最著名的两?span lang="EN-US">CASE工具Q?span lang="EN-US">Rational Rose?span lang="EN-US">PowerDesigner的名声可谓如雯耟?span lang="EN-US">Rose是当时全球最大的CASE工具提供?span lang="EN-US">Rational的拳头品,UML建模语言是?span lang="EN-US">Rational公司的三位巨?span lang="EN-US">Booch?span lang="EN-US">Rumbaugh?span lang="EN-US">Jacobson发明的,后来Rational?span lang="EN-US">IBM收购Q所?span lang="EN-US">Rose 可谓n名门Q嫁入豪族。?span lang="EN-US">PowerDesigner也有一D好玩的历史Q作者王晓昀是一位中国hQ在法国SDP软g公司工作Ӟ׃苦觅一个好用的CASE工具未果Q干脆自由开搞,整了?span lang="EN-US">AMC*Designor出来Q居然一炮打响,在法国卖得个?/span>巴黎U贵?/span>Q后?span lang="EN-US">SDP?span lang="EN-US">Powersoft公司收购Q同q?span lang="EN-US">Sybaseq只大黄雀又吃下了Powersoftq只螌Q所?span lang="EN-US">PowerDesigner也是惊艳出场Q星光四?span lang="EN-US">
但两者所走的明星路线却很不相同,Rose出道是时Q走的是UML面向对象建模Q而后再向数据库徏模发展,?span lang="EN-US">PowerDesigner则反光而行之,它先是一个纯_的数据库徏模工P后来才向面向对象建模Q业务逻辑建模及需求分析徏模进军,最l变?span lang="EN-US">?/span>演视歌三?span lang="EN-US">?/span>明星?span lang="EN-US">
׃W一印象的媄响,所?span lang="EN-US">Rose常常lh的印象还是只是面向对象分析设计的工具Q?span lang="EN-US">PowerDesignerlh的印象则q停留在数据库徏模工具上。其实,现在?span lang="EN-US">Rose?span lang="EN-US">PowerDesigner都即可以q行数据库徏模,也可以进行面向对象徏模,只是存在支持上的偏重而已?span lang="EN-US">
二?二者区别概q?span lang="EN-US">
Rose?span lang="EN-US">PowerDesigner虽然在项目分析设计领域已l成高度聚光的明星,但是在具体用哪ƑַL(fng)问题上,不同的公司,不同的hQ出于成本,?fn)惯抑或个h喜好Q往往有自q判断。由于笔者在不同的公怸被分别要求?span lang="EN-US">Rose?span lang="EN-US">PowerDesignerq行分析设计工作Q所以对二者有着较ؓ(f)l致的体验?span lang="EN-US">
Rose走大而全Q一站式的策略,它没有将数据库设计和面向对象设计清晰地分开Q仅以不同的目录来区分。?span lang="EN-US">PowerDesigner两者划分到独立的模型文件中Q分别对应不同的设计环境Qƈ通过模型之间的{换工具徏立各模型的关联。即使对于数据库设计模型Q?span lang="EN-US">PowerDesigner也需要你选择一个具体的数据库品及其版本,以便工作环境对具体数据库敏感。所?span lang="EN-US">Rose昑־大而化之,?span lang="EN-US">PowerDesigner则比较精l和具体化?span lang="EN-US">Rose的逆向工程Q文档输出,代码生成{输入输出功能上表现得比较生单调,PowerDesigner在逆向工程Q特别是文档输出和代码生成这些功能上提供了精l的控制Q让用户拥有高度的自由度?span lang="EN-US">
Rose在操作体验上存在很多需要改q的地方Q?span lang="EN-US">Rose偏向于让用户用鼠标进行操作,寚w盘操作支持不好。?span lang="EN-US">PowerDesigner在用户体验上得分很高Q大部分操作都可以通过键盘完成Q在充分熟?zhn)其快捷键的前提下Q?span lang="EN-US">PowerDesigner给设计者一U行云流水的感觉Q用户交互上更加人性化。此外,Rose往往占用更多的资源,Ҏ(gu)异常退出,PowerDesigner则显得轻便稳定。所以,我个人对两者的体验是“RoseW拙Q?span lang="EN-US">PD利烦?/span>。下面将具体列出Rose?span lang="EN-US">PowerDesigner的一pd的区别,怿大家可以借由q些比较而见微知著,H斑知vQ以资在选择工具Ӟ提供参考?span lang="EN-US">
三?模型l织和层ơ结构上的区?span lang="EN-US">
1、模型组l?span lang="EN-US">Rose数据库模型和对象模型放在一P在进行数据表模型设计Ӟ没有Ҏ(gu)化的东ѝ?span lang="EN-US">PowerDesigner两者分开Q其模型l织层关系是:工作I间->模型cd->具体语言/数据库的模型->?span lang="EN-US">->文g?span lang="EN-US">->Diagram->设计元素。在创徏模型文gӞ会让你选择模型cdQ选择模型cd后,q可以选择模型cd下语a及版本相关的l分cR不同设计模型对应Y件工E的不同阶段Q如业务模型和需求模型属于项目需求阶D,而对象模型属于概要和详细设计阶段Q数据库模型属于详细设计阶段。它们之间虽然有很强的内在联p,但差异性也很明显,将两者放CPp把猴子和猩猩兌同一个笼子,Z兼顾和^衡两者之间的考量Q其l果是两者都得不到很好的支持?span lang="EN-US">
?span lang="EN-US"> 1新徏模型H口(PD)
?span lang="EN-US"> 2新徏模型H口(Rose)
PowerDesinger可以通过模型转换工具q行数据库徏模和面向对象模型的相互{换。但Rose不能对象{换ؓ(f)表,也不能将表{换ؓ(f)对象?span lang="EN-US">
2、工作空?span lang="EN-US">PowerDesigner有工作空间的概念Q一个工作空间下可以同时打开多个设计模型文g;?span lang="EN-US">Rose同时仅能打开一个设计文Ӟ如果在设计时Q需要参考其他的Rose设计模型Q则需要反复关闭现有模型,打开参考模型,昑־设计上比较欠考虑。这个问题上两者的差异CEclipse?span lang="EN-US">JBuilder的区别,Eclipse可以同时打开多个工程Q?span lang="EN-US">JBuilder只能同时打开一个工E?span lang="EN-US">
3、设计界?span lang="EN-US">PowerDesigner的设计界面可以左右上下移动,?span lang="EN-US">Rose只能向右Q向下移动,此外?span lang="EN-US">PowerDesigner可以模型元素放大很多倍,?span lang="EN-US">Rose只能攑֤到正常倍数Q不q?span lang="EN-US">Rose?span lang="EN-US">Overview工具可以使用户快速定位到设计Z特定的区域,有点cM于游戏界面中常用的小地图Q挺不错;
?span lang="EN-US"> 3 Overview工具(Rose)
而在PowerDesigner中,你可以通过F8快捷键查?span lang="EN-US">Diagram的总览图,不过只得通过攑֤操作定位到定位区域?span lang="EN-US">
四、对模型和语a的支?span lang="EN-US">
? 对设计模型的支持力度和广?span lang="EN-US">
PowerDesigner对对象模型和数据库徏模两者的支持力度已经大抵相等Q此外,q支持概忉|型、业务模型、需求模型?span lang="EN-US">XML模型、信息流模型、自由模型的分析设计。不q对后面q几个模型的支持比较初Q而且在实际的应用中,q些模型用得也比较少Q?span lang="EN-US">PowerDesigner的突Z点还是在数据库徏模和对象模型的设计上?span lang="EN-US">
对于数据库模型,PowerDesigner支持20余种数据库,对于同一数据库的不同版本q提供单独的支持Q以便在设计数据库模型时Q提供数据库和版本相关的设计。对于面向对象模型,PowerDesigner支持11U主语aQؓ(f)?span lang="EN-US">Java 5.0提供单独的支持?span lang="EN-US">
Rose基本上可以说是一个对象模型设计工PҎ(gu)据库模型的支持相对粗p,内嵌的只支持Oracle 8数据库,对其他数据库设计的支持需要通过安装插g的方式获得,且对数据库物理存储参数等较细_度的内Ҏ(gu)持得比较_糙?span lang="EN-US">Rose的对象模型主要支?span lang="EN-US">Java?span lang="EN-US">VC?span lang="EN-US">VB三种语言?span lang="EN-US">
? ?span lang="EN-US">Java语言的支?span lang="EN-US">
Rose?span lang="EN-US">Java语言的支持更好,不但Z同版本的JDK提供了支?span lang="EN-US">(不过Rose 2003q不支持JDK 5.0)Q还?span lang="EN-US">Java具体产品及设计模?span lang="EN-US">(?span lang="EN-US">EJB?span lang="EN-US">Corba?span lang="EN-US">ServletQ?span lang="EN-US">GOF设计模式{?span lang="EN-US">)提供了内嵌性的支持Q这些支持直接反应在Rose的主菜单上。正因ؓ(f)如此QRose背上的沉重的历史负担Q如EJB?span lang="EN-US">Corbaq种语言U的东西是易变且不断更新的,如何在这些具体品的C和媄响已l降低时Q对其作出割舍而又保证版本的兼Ҏ(gu),是摆在设计者面前的N?span lang="EN-US">
PowerDesigner仅提供语aU对象设计的支持Q不涉及语言内部的具体品。其ơ因为它的设计工作区是和具体的模型类型及语言l分cȝ关的Q而非在主菜单中直接提供支持,所?span lang="EN-US">PowerDesigner在升U时昑־更加从容一些?span lang="EN-US">
q也是ؓ(f)什?span lang="EN-US">PowerDesigner能以每年一个版本的速度升Q?span lang="EN-US">Rose?span lang="EN-US">2003版本后,新版本还q迟投入市场的内在原因,否则?span lang="EN-US">IBM的胦力,研发能力不至于对市场反应如果~慢?span lang="EN-US">
五、输入和输出功能的比?span lang="EN-US">
? 反向工程
从将E序代码转换计模型的逆向工程功能上看Q?span lang="EN-US">Rose更象一?span lang="EN-US">IDEQ它会对需要逆向工程操作的程序代码进行深度语义检查,如果存在诸如E序代码引用了类库之外的c,反向工程失败,而且在报告失败之前,H口会陷入长旉无响应状态?span lang="EN-US">
PowerDesigner仅对需逆向工程的程序代码进行浅度语法检查,q种度语法查不涉及包,cM间的兌Q仅对诸如类名是否和cL件名匚wQ是否少?span lang="EN-US">“}?{语法性的内容q行查。即便存在错误,PowerDesigner也允怽忽略错误Ql进行逆向工程操作Q这U宽杄限制带来了很大的便利?span lang="EN-US">
?span lang="EN-US"> 4逆向工程p|选择三种选择(PD)
忽略错误后,PowerDesigner会尽量修补错误,例如代码中少了对应的“}?/span>Q它?yu)会补上Q类名和文g名不一_忽略类文g名保持类名不变?span lang="EN-US">
Rose一直宣扬的理念?span lang="EN-US">IDE和设计工E进行双向互通:?span lang="EN-US">Rose中完成模型设计后导出?span lang="EN-US">IDE所用的代码Q?span lang="EN-US">IDE~码调整后又逆向工程?span lang="EN-US">Rose。理念很,深具吸引力,但是在实CQ往往很少有开发团队会q样做。一?span lang="EN-US">CASE工具只是在分析设计阶D用,甚至很大比例的设计师仅把它当成画囄工具?span lang="EN-US">
真正q入~码开发阶D后Q将加入大量设计时不涉及的类和方法,如果这些非骨架性的东西Reverse?span lang="EN-US">CASE工具中,反而会使原来清晰的设计变得N花,水中月。所以即使编码时Q需要对原分析模型进行调_一般也是手工去调整设计模型Q而不是通过逆向工程d步,毕竟分析设计是骨架性的Q而编码是血肉性的Q两者有属性上的区别。如果真的需要频J进行的代码?span lang="EN-US">UML转换Q最好用类gTogether一L(fng)工具Q它嵌入?span lang="EN-US">IDE中,使代码和模型转换方便快捷?span lang="EN-US">
? 文档导出功能
PowerDesignerҎ(gu)档导出提供了_的控Ӟ你不但可以对文档所包含的内定wq行讄Q还可以对内定w的格式进行设|。如导出的表l构是否包括名称、数据类型、备注等目Q这些项目在表栏中的宽度占比Q颜Ԍ字号{等Q不一而?span lang="EN-US">
PowerDesinger 12.0 q新增了一个多模型文档整合导出?span lang="EN-US">Milti-Model Report模型Q允怽以多个模型作入生成ؓ(f)l一文档Q实现模型设计按阶段分开Q文档又l一整合的目的?span lang="EN-US">
׃PowerDesigner文档导出的设|非常精l,所以要讄好一个文档导出模式实非不易。有鉴于此,PowerDesinger提供了三U常用的导出模板Q用户也可以自己定义模板。通过模板可以q速完成设计模型文档的导出工作?span lang="EN-US">
?span lang="EN-US">Rose没有导出模板的概念,更不能对导出和格式q行讄Q你只能?span lang="EN-US">Rose的系l内|的方式q行模型文档的发布?span lang="EN-US">
? 代码导出
在导计模型的代码ӞPowerDesigner提供了精l的控制Q不但可以进行对象别,q可以进行代码别的控制(如是否要生成字段备注的代码,外键代码在表体代码内声明q是在表体外部声明等)Q?span lang="EN-US">Rose没有提供代码导出的控Ӟ也只能按其系l内部设|的方式导出代码?span lang="EN-US">
?span lang="EN-US"> 5 数据库模型导|?span lang="EN-US">(PD)
?
生成试数据
PowerDesigner可ؓ(f)数据表生成批量的试数据Q而且你还可以制定试数据的生成规则。这个功能给初期目的开发测试带来很大的便利?span lang="EN-US">Rose中没有提供类似的功能?span lang="EN-US">
1 {$ page title=易用性上的比?span lang="EN-US">}
六?易用性上的比?span lang="EN-US">
6.1、元素显C属性调?span lang="EN-US">Rose调整元素的显C属?span lang="EN-US">(如类囄昄样式Q方法入参是否显C等内容)的设|时Q新讄仅对新创建的元素起作用,如需调整已有元素的显C属性,只得在设?span lang="EN-US">Diagram中,逐一通过右键的方式一个个调整Q做法有点刀耕火U的味道?span lang="EN-US"> PowerDesigner在这点上昑־很h性化Q在调整完元素显C|后Q?span lang="EN-US">PowerDesigner弹出一个窗口,提供三个应用新设|的选择Q?span lang="EN-US">
?span lang="EN-US"> 6元素昄讄调整后应用范?span lang="EN-US">(PD)
其一Q应用到所有元?span lang="EN-US">;其二Q应用到当前选择的元素,其三Q应用到新创建的元素。此外,PowerDesignerҎ(gu)一cd?span lang="EN-US">(如类图,序列图,表图Q引用等)的构成项(如表名,字段名,主键列,索引列等)均可以提供单独的昄属性设|,?span lang="EN-US">Rose的控制要_很多?span lang="EN-US">
6.2?span lang="EN-US">Undo操作Rose?span lang="EN-US">Undo操作只能回退一步,有时甚至q一步都不能回退Q假设你不小心删除了一个精心设计的模型元素Q如果不及时UndoQ就只得重头再来了?span lang="EN-US">Rose不给设计者后(zhn)的ZQ这U一厢情愿的呆瓜式设计有时真让h捶胸Q所以你在删除或调整元素Ӟ往往得战战兢兢,如薄冰。相比之下,PowerDesigner则显得宽宏大量,允许?span lang="EN-US">Undo几十步,自动地进行工作场景的回溯Q所以在PowerDesigner下工作,会比较轻松自如,因ؓ(f)你不用ؓ(f)误操作而付Z仗?span lang="EN-US">
6.3、查询功?span lang="EN-US">PowerDesigner的查询功能比较强大,可以按模型类型,元素cd限定查询范围;q可以用复合条件进行精搜索?span lang="EN-US">
?span lang="EN-US"> 7高搜烦H口(PD)
在元素查询结果列表中Q可以选择定位到导航树(wi)Q?span lang="EN-US">Diagram或者属性设计窗口,非常方便;?span lang="EN-US">Rose只能按名U进行搜索,且从搜烦l果列表只能定位到元素所在的Diagram中?span lang="EN-US">
?span lang="EN-US"> 8 搜烦H口(Rose)
6.4、默认字体的问题PowerDesigner有一个比较让厌的东西Q就是字体大的pȝ默认值是8号字Q对于中文来说这个字号太了Q需?span lang="EN-US">9号字才比较适合。所以在设计元素Ӟ需要分别调整字体的大小Q或者去改变每种元素的默认字体设|,相对来说比较ȝ。?span lang="EN-US">Rose在这点中做得不错Q系l默认的中文字体大小的默认值刚好适合?span lang="EN-US">
6.5、元素布局调整PowerDesigner?span lang="EN-US">Diagram中元素的布局提供了更多的支持Q如元素寚w排列Q元素的上下囑ֱ关系{,q提供了相应的快捷键Q操作v来很手。?span lang="EN-US">Rose仅支持自动布局(Auto Layout)功能Q毫无二致地选择的元素水q中心对齐,也没有图层前后移动的功能?span lang="EN-US">
6.6、用鼠标q行元素选取的策略在Diagram中选择模型元素ӞPowerDesigner采取?/span>完全包含选取{略?/span>Q?span lang="EN-US">Rose采取?/span>部分包含选取{略?/span>。在?/span>完全包含选取{略?/span>下,Diagram中的元素需要完全被鼠标选择的矩形区域包含后Q才被选中;而在?/span>部分包含选取{略?/span>下,只要元素的部分区域被鼠标选择的矩形区域包含,p选中。依个h的用经验,觉得?/span>完全包含选取{略?/span>是更适合些,Microsoft的品也采用q种{略。因为在?/span>部分包含选取{略?/span>下,只要一擦边Q元素就被选择了,其结果往往是选择了很多不希望选取的东西,如连U,周边元素囑Ş{?span lang="EN-US">
6.7、代码预览功?span lang="EN-US"> PowerDesigner可以在属性窗口中预览模型元素(如类、接口、表、视囄)对应的代码。在cd的属性窗口中Q甚臌可以直接~辑预览的代码来q行模型元素的设计,pTogether一栗在设计诸如c,接口的模型元素的Ҏ(gu)Ӟ对于有着丰富~程l验的设计师来说Q有时与光过一个又一个弹出对话框Q还不如直接通过~写代码来得方便Q?span lang="EN-US">PowerDesigner的这U设计充分地考虑C分析设计人员同时也是开发h员出w的特点Q由此带来很大的便利Q提高了效率?span lang="EN-US">
?span lang="EN-US"> 9c设计属性窗?span lang="EN-US">(PD)
而在Rose中,模型元素没有代码预览功能Q更不能通过代码q行反向设计Q只有通过导出代码的功能才能看到模型元素的代码?span lang="EN-US">
6.8、同cd元素l一理H口PowerDesigner为每一cd元素(如字D,表,对象Q烦引,主键{?span lang="EN-US">)提供了集中管理窗口,可以在该列表中对同类元素q行l一理。如在设计数据库模型Ӟ希望所有的索引存储C个指定的表空间中Q你可以打开索引的集中管理窗口:
?span lang="EN-US"> 10 索引属性列表框(PD)
在此理H口中调整所有烦引的Options讄可以了。如果没有这L(fng)集中理H口Q就需要在每个表的属性窗口中分别独自地设|表索引?span lang="EN-US">Options属性,操作J琐暂且不提Q如何去保证每个索引都得到正的讄够让h伤脑{了。而在Rose下,你就得逐门逐户查户口式的一个个去设|,没有捷径可走?span lang="EN-US">PowerDesigner的这U分散设计,集中理的设计思\体现对立l一的哲学思想的完好运用,因ؓ(f)事物有其独特性,也有其统一性,需要兼两者而不可偏废?span lang="EN-US">
6.9、批量编辑操?span lang="EN-US">
PowerDesigner的批量编辑操作能够大大提高的工作效率Q这些批量编辑操作包括同旉中多个元素目Q同时编辑选中的相同属性|调整序{?span lang="EN-US">
1
{$ page title=资源占用和运行稳定?span lang="EN-US">}
?span lang="EN-US"> 11扚w~辑操作(PD)
Rose不支持批量编辑和扚w序调整{操作,需要逐一~辑Q?span lang="EN-US">
?span lang="EN-US"> 12 不支持批量编?span lang="EN-US">(Rose)
? 元素快捷囄
PowerDesigner可以创徏模型元素的快捷图C,它相当于是元素视囑ֱ上的多䆾拯Q同一个物理元素对应多个逻辑的图C。这对于大型复杂pȝ的分析设计特别有好处Q因Z个模型元素会在多个地方被引用Q这时你可以通过Ctrl+C?span lang="EN-US">Ctrl+K的方式来创徏模型元素的快捷图C,在多个地方用它Q甚臛_同一?span lang="EN-US">Diagram中一个元素在不同的地方出现多ơ,防止大距ȝ关系q线D蜘蛛|式的设计图?span lang="EN-US">
Rose也可以创建快捷图C,即通过Ctrl+C?span lang="EN-US">Ctrl+V创徏Q但却不能复制一个现有的元素Q?span lang="EN-US">Ctrl+C?span lang="EN-US">Ctrl+V?span lang="EN-US">PowerDesigner中是创徏一个复制的元素。此外,在同一?span lang="EN-US">Diagram中,同一元素的不同快捷图C,Rose是表Cؓ(f)相同的名字,?span lang="EN-US">PowerDesigner则会d数字后缀Q以C区分?span lang="EN-US">
?
属性窗口大调?span lang="EN-US">
Rose的编辑属性窗口没有放大,~小按钮Q需要手工拖动鼠标调整大,一直不明白Z么如此简单的功能Q?span lang="EN-US">Rose也要吝啬不提供?span lang="EN-US">PowerDesinger的属性窗口则没有q个限制?span lang="EN-US">
?span lang="EN-US"> 13属性窗?span lang="EN-US">(Rose)
七、资源占用和q行E_?span lang="EN-US">
? 资源占用
Rose在进行面向对象的设计Ӟ׃要加载大量的cdQ导致内存资源占用很大,往往??xml:namespace prefix = st1 />
?span lang="EN-US"> 14 资源占用?span lang="EN-US">
? E_性上
Rose常有H口?/span>抽筋?/span>的反?span lang="EN-US">(H口变白Q不接受M响应)Q甚x无征兆地异常退出,定w性也不太好。如在逆向工程Ӟ如果代码存在错误Q甚至仅仅对一个存在错误的c进行逆向工程Q窗口也会出?span lang="EN-US">?/span>抽筋?/span>现象?span lang="EN-US">
PowerDesigner昑־灉|快捷Q很出现窗?span lang="EN-US">?/span>抽筋?/span>和意外退出的现象?span lang="EN-US">
相比于基于Delphi的Dev-C++׃nC++IDEQCode::Blocks是开放源码Y件。Code::Blocksq_的C++语言开发完成,它用了蓍名的图形界面库wxWidgets(2.6.2 unicode)版。对于追求完的C++E序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的h(hun)根{?
虽然Code::Blocks从一开始就q求跨^台目标,但是最初的开发重Ҏ(gu)Windowspȝ下的版本Q从06q??1日版本:1.0 revision 2220开始,Code::Blocks在它的每日构Z正式提供Linux版本Q分两个版本Qubuntu.deb和fc4.rpmQ。这?Code::Blocks?.0发布时就会是跨越q_的C/C++IDEQ它?yu)支持Windows和Linux的主要版本。长期以来C++开发员在Linux没有好用、通用的C++ IDE的局面就要结束。而这个IDE对于Windows下的用户同样重要Q由于它开放源码的特点QW(xu)indows用户可以不依赖于VS.NETQ编写跨q_C++应用?
Code::Blocks提供了许多工E模板,q包括:控制台应用、DirectX应用、动态连接库、FLTK应用、GLFW应用、Irrlicht工程、OGRE应用、OpenGL应用、QT应用、SDCC应用、SDL应用、SmartWin应用、静态库、Win32 GUI应用、wxWidgets应用、wxSmith工程Q另外它q支持用戯定义工程模板。在wxWidgets应用中选择UNICODE支持中文?
Code::Blocks支持语法彩色醒目昄Q支持代码完成(目前正在重新设计q程中)支持工程理、项目构建、调试?
Code::Blocks支持插gQ目前的插g包括代码格式化工具AStyleQ代码分析器Q类向导Q代码补全;代码l计Q编译器选择Q复制字W串到剪贴板Q调试器Q文件扩展处理器QDev-C++ DevPak更新/安装器;DragScrollQ源码导出器Q帮助插Ӟ键盘快捷键配|,插g向导QTo-Do列表QwxSmithQ;wxSmith MIME插gQwsSmith工程向导插gQWindowsXP外观?
Code::Blocksh灉|而强大的配置功能Q除支持自n的工E文件、C/C++文g外,q支持AngelScript、批处理、CSS文g、D语言文g、Diff/Patch文g、Fortan77文g、GameMonkey脚本文g、Hitachi汇编文g、Lua文g、MASM汇编文g、Mathlab文g、NSIS开源安装程序文件、Ogre Compositor脚本文g、Ogre Material脚本文g、OpenGL Shading语言文g、Python文g、Windows资源文g、XBase文g、XML文g、nVidia cg文g。识别Dev-C++工程、MS VS 6.0-7.0工程文gQ工作空间、解x案文件?
Code::BlocksZwxWidgets开发,正体CwxWidgets的强大。以前Borland C++ Builder X宣称ZwxWidgets开发跨q_、兼Ҏ(gu)好、最优秀的C++ IDE环境Q但没有实现Q现在Code::Blocks+GNU GCC正在实现q个理想。让我们拭目以待。国内的Code::Blocks爱好者和跨^台开发员应该快建立中文Code::Blocks|站Q提供Code::Blocks中文化支持,促进Code::Blocks在国内的发展?
[~辑本段]
8.02版是必须安装的,然后才能升?
2.11 下蝲安装文g
Code::Blocks的发行版版本号就是它的发行年月,所?.02版,是08q?月䆾发布的,其实地相当于1.0版?
Code::Blocks|站Qwww.codeblocks.org 其下载页面(http://www.codeblocks.org/downloads/5Q提供了windows,Linux(多个发行?Q及Mac OS X 的安装文件或源文件包?不过我们暂时只讲Windows下的安装。所以?zhn)可以下面的链接Q复制到q雷之类的工具下载?
http://download.berlios.de/codeblocks/codeblocks-8.02mingw-setup.exe
或?http://download2.berlios.de/codeblocks/codeblocks-8.02mingw-setup.exe
2.12 卸蝲可能的mingw32先前版本
Code::Blocks支持多种~译器,但我们主要讲Windows下的mingw32 g++~译器。因此需要安装mingw32。前面下载的安装E序已经自带有完整的mingw32环境。mingw32是g++环境在windows下的一个实现。ؓ(f)了避免版本与路径冲突Q最好不要在一台机器上安装两个mingw32。所以本步要求检查一下?
如果(zhn)以前有用过Dev C++之类也采用mingw32的IDEQ那(zhn)最好先卸蝲了它们。如果?zhn)不懂什么叫mingw32,那估计你的机器就是没能安装过吧。那q一步蟩q?
2.13 开始安?
双击下蝲的文Ӟ可以开始完装了Q主要就两个注意点:
W一、选择“Full/完整”安装,免得一些插件没有被安装上?
W二、安装目录最好不要带有空格或汉字?
q一点ƈ不是Code::Blocks的限Ӟ而是因ؓ(f)mingw32里的一些命令行工具Q似乎对长目录或带空格的目录支持有点问题,我估计汉字目录也会出问题Q但没试q。一句话Q就装在根目录下的X:\CodeBlocks卛_。比如我是安装在E:\CodeBlocks下?
2.2 升Code::Blocks到最新svn?
Code::Blocks是开源的软gQ它们源代码理采用subversion理Q因此它的编译版本就直接采用svn的版本了?
code::blocks的网站看不去不怎么更新Q其实程序的主要都在它的BBSQhttp://forums.codeblocks.org/Q的nightly builds子论坛中更新?
2.2.1 下蝲升文gQƈ覆盖原有文g
q里l出同样l出截至今天Q北京时?008q??0日半?点)的最新升U包下蝲地址Q?
http://download.berlios.de/codeblocks/CB_20080719_rev5142_win32.7z
或者: http://download2.berlios.de/codeblocks/CB_20080719_rev5142_win32.7z?
下蝲的是.7zip的文Ӟ可以用WinRAR或开?zip软g解压全部文gQ覆盖原目录下的文gQ比如,我需要把它们解压:E:\CodeBlocks\ 目录下?
要持l跟t最新版本,请关注本|站Q或者直接到前述官方论坛查看?
2.2.2 试运?
双击桌面上的Code::Blocks启动图标——如果没有,那就到开始菜单里找找。启动时Q能看到一个启动界面,?
下若有显C“svn 5142?那就说明安装及升U成功了?
当然Q你也可以在启动完成后,像其他Y件一P到“Help”菜单下䏀About”查看详l版本信息?
现在Code::Blocksq是英文界面的,接下来我们谈谈如何安装它的语a包?
2.3 使用本地语言?
首先Q请?X:\CodeBlocks\share\CodeBlocks\ 建立一个子文g夹:localeQ注?locale 全ؓ(f)写字母?
我对体汉字的语言包做了较大改q,不过仍然没改完,另外Q一些插件在当前版本本来无法汉化的Q所以还有一部分内容是英语的。繁体部分我没有改动?
d2school版Code::Blocks语言包下载?
下蝲后,误压到前述的locale目录下,则locale目录下,应出现zh_CN和zh_TW两个子目录?
重新启动Code::BlocksQ点M菜单的“Settings”,选择“Enviornment”。出现的对话框中Q左辚w中“View”,双打勾“Internationalization (needs restart)”,q在后面的复合框中选中“Chinese (Simplified)”。确认退出本对话框?
重启Code::Blocks。再看到的应该是中文体界面了?
2.4 基本配置 Code::Blocks
一ƄE用的IDEQ一定要不断Ҏ(gu)自己的需要进行配|,才会变得好用h。不q本文仅仅讲那些必选项。也是如果没配|好Q这个Code::Blocks干不了zȝ选项。有兛_它的选项Q因为太多,我不可能现在开始写Q以后我会慢慢整理一些放在本站。需要的人,请多xwww.d2school.com。主要会是一些常用的快捷键等配置Q给不熟(zhn)的人带个头Q最l还是靠自己去配|?
2.41 配置g++~译器及调试?
请大安先到 X:\CodeBlocks\MinGW\bin下,查一下有没有以下文gQ?
mingw32-gcc.exe q是C的编译器?
mingw32-g++.exe q是CQ+的编译器Q同是地DLLQ动态库Q的q接器?
ar.exe q是静态库的连接器?
gdb.exe q里调试器?
windres.exe windows下资源文件编译器?
mingw32-make.exe 制作E序?
都没有问题,L(fng)击c::b主菜单“设|”(汉化前的"Settings"Q,q次选中“编译器和调试器讄...”。,出现的对话框中,双选中“全局~译器设|”,然后对照下图Q检查左辚w|是否正无误:
现在我们可以拿Code::Blocks来写评里的很多C++代码了?
对于Linux的用者,׃GCC原生于Linux, 所以只需下蝲Code::Blocks|站?tar.gz卛_。Code::Blocks对DebianpL供了更好的支援?
VS2008中英文正式版序列?br>1.Visual Studio 2008 Professional Edition:
XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4WT
2.Visual Studio 2008 Team Test Load Agent:
WPX3J-BXC3W-BPYWP-PJ8CM-F7M8T
3.Visual Studio 2008 Team System:
PYHYP-WXB3B-B2CCM-V9DX9-VDY8T
4.Visual Studio 2008 Team Foundation Server:
WPDW8-M962C-VJX9M-HQB4Q-JVTDM
-----------------------------------------------------------------
?0天试用版改ؓ(f)正式版,二种Ҏ(gu):
1. 把Setup\setup.sdb文g中的
[Product Key]
T2CRQGDKBVW7KJR8C6CKXMW3D
Ҏ(gu)
[Product Key]
PYHYPWXB3BB2CCMV9DX9VDY8T
2.安装完成后,?#8220;控制面板”中启?#8220;d删除E序”,选中Vs2008Q点?#8220;更改、删?#8221;Q?br>输入序列?PYHYP-WXB3B-B2CCM-V9DX9-VDY8T
2、对于Release版本E序Q需要设|生program database 和generate debuginfoQ才可以使用crash finder扑ֈ崩溃代码?Debug版本是默认生的Q?/p>
3、Generate Debug Info的程序会比Don't Generate Debug Info的大20%左右Q如?/p>
Generate Debug Info: 1,503,297
Don't Generate Debug Info: 1,212,416
rate: 80.65%
4、在Generate Debug Info生成的exe最后,会有PDB的绝对目录位|;
5、用Crash FinderӞ需要把对应的PDB攑ֈl对目录位置里面Q才可以扑־到调试信息;
6、每ơ发布程序之后,要保留代?.h, .cpp)Qexe和对应的PDBQ下面是一个组lŞ式?/p>
crash finder下蝲
http://www.shnenglu.com/Files/woaidongmao/CrashFinder.rar
2??〉自定义-〉新?〉选择 EmCommnMarco.jseeQ?/p>
3、宏-〉设|ؓ(f)当前?/p>
4、按下F4p行宏?/p>
/**
* Ҏ(gu)输入的正则表辑ּQ提取与之匹配的字符Ԍq新Z个文档显C所有匹配的字符Ԍ
* 昄时每个匹配项占一?
*
* @author Guapo
* @version v1.0
*/
function getText()
{
var _regex=prompt("本程序用来提取正则表辑ּ匚w的字W串Q请输入正则表达?,"");
if(_regex==""||_regex==null)
{
alert("输入为空Q请重新输入");
return;
}
var regex=new RegExp(_regex,"gim");
document.selection.SelectAll();
var textInCurrentDocument=document.selection.Text;
var matchResultArray=textInCurrentDocument.match(regex);
if(matchResultArray)
{
var len=matchResultArray.length;
editor.NewFile();
for(var i=0;i<len;i++)
{
document.writeln(matchResultArray[i]);
}
}
else
{
alert("没有扑ֈ匚w的字W串");
}
}
/**
* 拯正在~辑的文档的完整路径(含文件名和扩展名)到剪贴板
*
* @author Guapo
* @version v1.0
*/
function copyFullName()
{
if(document.Saved)
{
document.CopyFullName();
}
else
{
alert("请保存文件后再执行此命o");
}
}
/**
* 拯正在~辑的文档的路径(不含文g名和扩展?到剪贴板
*
* @author Guapo
* @version v1.0
*/
function copyPath()
{
if(document.Saved)
{
document.CopyPath();
}
else
{
alert("请保存文件后再执行此命o");
}
}
/**
* 删除当前正在~辑文档的行首的所有空?包含Tab?
*
* @author Guapo
* @version v1.0
*/
function deleteLineStartBlank()
{
document.selection.Replace("^\\s*","",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
}
/**
* 删除当前正在~辑文档的行所有空?包含Tab?
*
* @author Guapo
* @version v1.0
*/
function deleteLineEndBlank()
{
document.selection.Replace("\\s*$","",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
}
/**
* 为当前正在编辑文档的每一行的行首dn个空?
*
* @author Guapo
* @version v1.0
*/
function addBlank2LineStart()
{
var string_n=prompt("请问(zhn)要l行首添加几个空格呢Q?,"1");
if(isN(string_n))
{
var s="";
var int_n=parseInt(string_n);
for(var i=0;i<int_n;i++)
{
s+=" ";
}
s+="\\0";
document.selection.Replace("^.",s,eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.HighlightFind=false;
return;
}
else
{
alert("(zhn)输入的不正,请重新输?);
}
}
/**
* 为当前正在编辑文档的每一行的行尾dn个空?
*
* @author Guapo
* @version v1.0
*/
function addBlank2LineEnd()
{
var string_n=prompt("请问(zhn)要l行添加几个空格呢Q?,"1");
if(isN(string_n))
{
var s="";
s+="\\0";
var int_n=parseInt(string_n);
for(var i=0;i<int_n;i++)
{
s+=" ";
}
document.selection.Replace(".$",s,eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.HighlightFind=false;
return;
}
else
{
alert("(zhn)输入的不正,请重新输?);
return;
}
}
/**
* 当前正在编辑文档中的所?gt;=两个的相q空格替换成一个,只支持英文半角空?
*
* @author Guapo
* @version v1.0
*/
function replace2MoreBlank()
{
document.selection.Replace(" {2,}"," ",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
}
/**
* 当前正在编辑文档中的所?gt;=两个的相q空行替换成一?
*
* @author Guapo
* @version v1.0
*/
function replace2MoreNewLine()
{
return;
}
/**
* 为当前正在编辑文档中的所有行的行首添加特定的字符?
*
* @author Guapo
* @version v1.0
*/
function addString2LineStart()
{
var s=prompt("请问(zhn)要在行首添加什么字W串呢?","在这里输入要d的字W串");
if(s==""||s==null)
{
return;
}
var t="\\0";
document.selection.Replace("(^.)|(^\\n)",s+t,eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.HighlightFind=false;
}
/**
* 为当前正在编辑文档中的所有行的行添加特定的字符?
*
* @author Guapo
* @version v1.0
*/
function addString2LineEnd()
{
var s=prompt("请问(zhn)要在行添加什么字W串呢?","在这里输入要d的字W串");
if(s==""||s==null)
{
return;
}
var t="\\0";
document.selection.Replace("(.$)|(^\\n$)",t+s,eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.HighlightFind=false;
}
function isN(s)
{
if(s==null||s=="")
{
return false;
}
var array=s.match(/\d+/);
if(array)
{
if(s==array[0])
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
mainMenu=CreatePopupMenu();
mainMenu.Add("拯路径(不含文g?",1);
mainMenu.Add("拯完整路径(含文件名)",2);
mainMenu.Add( "", 0, eeMenuSeparator );
mainMenu.Add("利用正则表达式提取字W串",3);
mainMenu.Add( "", 0, eeMenuSeparator );
mainMenu.Add("删除行首所有空?,4);
mainMenu.Add("删除行尾所有空?,5);
mainMenu.Add("行首dn个空?,6);
mainMenu.Add("行尾dn个空?,7);
mainMenu.Add( "", 0, eeMenuSeparator );
mainMenu.Add("?gt;=两个的相q空格替换成一?,8);
mainMenu.Add("?gt;=两个的相q空行替换成一?,9);
mainMenu.Add( "", 0, eeMenuSeparator );
mainMenu.Add("在行首添加特定的字符?,10);
mainMenu.Add("在行添加特定的字符?,11);
mainMenu.Add( "", 0, eeMenuSeparator );
mainMenu.Add("关于",100);
var witchItem=mainMenu.Track();
switch(witchItem)
{
case 1:
copyPath();
break;
case 2:
copyFullName()
break;
case 3:
getText();
break;
case 4:
deleteLineStartBlank();
break;
case 5:
deleteLineEndBlank();
break;
case 6:
addBlank2LineStart();
break;
case 7:
addBlank2LineEnd();
break;
case 8:
replace2MoreBlank();
break;
case 9:
replace2MoreNewLine();
break;
case 10:
addString2LineStart();
break;
case 11:
addString2LineEnd();
break;
case 100:
alert("Author:Guapo\nEmail:yangshuai@gmail.com");
break;
default:
break;
}