×
Namespaces

Variants
Actions

迁移到Carbide.c++

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
harrylister 在 29 Nov 2007 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

Needs-update.png本文需要更新: 如果您发现这篇文章有用,请修复下面的问题,然后从文章中删除 {{ArticleNeedsUpdate}} 模板,以消除此警告。

原因: hamishwillee (18 Oct 2011)
This article was written at a time when Carbide was being introduced and the aim was still to migrate developers to Carbide. Now days we're trying to migrate them to Qt Creator in most cases. Since then Carbide branding has significantly changed. Many of the links are now broken. I think this could be re-written as a much simpler document and reflecting the current carbide 3.0+

本文是一篇诺基亚论坛官方文档《 "Switching to Carbide cpp White Paper" (link broken) 》的非正式中文翻译版本。希望本文能够为广大中国的Symbian C++开发者了解Carbide.c++这个工具,加快入门速度带来帮助:)

注:本文章的文本长度超过32K字节,Wiki系统不建议如此长篇。如果你的浏览器无法阅读本页的全文,请给我发电子邮件报告(浏览器、操作系统等情况),如果的确会影响到一些浏览器,我会酌情考虑分拆本文。

Sw-carbide-cn-cover.png


Contents

简介

2005年, Nokia发布了Carbide,一套为手机软件和内容开发者而设计的开发工具系列。该系列包括开发主题用的Carbide.ui和为开发Symbian C++应用程序所用的Carbide.c++Carbide.vs

自从2001年Symbian OS发布以来,已有几个集成开发环境(IDE)可供C++开发者选择使用。Microsoft Visual C++是第一个支持开发的IDE,近年来则是通过Carbide.vs提供对Microsoft Visual Studio支持。2003年, 为Symbian OS设计的Metrowerks CodeWarrior® Development Studio for Symbian OS发布了。CodeWarrior® IDE是为许多不同平台的软件开发而设计,从桌面到PDA环境几乎无所不包,因此它将Symbian OS软件开发更牢固地集成到IDE中。2005年Nokia收购了CodeWarrior Development Studio for Symbian OS的开发团队。

Carbide.c++在Metrowerks CodeWarrior Development Studio已取得成绩的基础上,更进一步扩展了Symbian OS开发的专业化和集成度。因此Carbide.c++Symbian OS开发者提供了一个更为集中化更有效的开发环境。一个熟悉Microsoft Visual Studio或Metrowerks CodeWarrior的用户会发现Carbide.c++的很多特性方面都有和其相似。尽管如此,迁移到Carbide.c++意味着转向一个功能更丰富的平台、配置性更强的环境,并且开发者在这个平台下需要适当做一些调整。幸运的是,我们没有太多需要掌握的新的概念:迁移到Carbide.c++基本只是一件更换工具、再学习并熟悉开发方式的过程,从而适应新的开发环境和一些新的改进了的开发工具。

该文档为正在使用Visual Studio和CodeWarrior,但是准备转入Carbide.c++的开发者提供了指导。首先,我们首先关注的是一些IDE方面的基本概念──例如Eclipse系统框架,然后才是开发者经常使用的几个特性:项目管理、编辑代码、编译和调试等。

Carbide.c++和Eclipse IDE

大多数Carbide工具是基于Eclipse IDE框架的。Eclipse IDE框架是一个可扩展的平台,该平台可使开发者在一个统一的用户界面下里实现不同目的的开发任务,它使得Nokia可以通过一套工具来实现对C++和手机界面主题来提供开发支持。

Eclipse由基本的Eclipse平台组成,该平台是一套Java™开发工具,以及一个模块化插件支持环境。通过添加不同的插件,平台就可以完成迥然不同的的功能。因此,Eclipse既是一个通用的IDE框架又是一个完整的Java IDE。

Eclipse是由Java程序语言编写的,默认地它是一个Java开发环境。在这种默认配置下,它是一个可以使用所有IDE的通用组件的强大工具。Eclipse IDE的通用界面中传达信息的主要部分为若干个独立的面板区域(pane)称作视图(view),如图1所示,它能使开发者在各个“角度”去观察软件。这种视图显示非常灵活。视图可放大到全屏或完全隐藏,而且在界面中它可被任意增减、摆放、组合。视图的版面种类、个数、位置等可以形成一个组合,可被保存为透视模式(perspective)配置,另外开发者可通过点击工具条区域右侧的透视模式切换按钮来切换使用透视模式。

图1 Eclipse IDE的Java开发模式屏幕截图(点击放大)

Eclipse的插件机制可以使任何开发者都能往Eclipse内添加任何新的插件,以此完成各种各样的功能。正是这个开放性、任意添加插件的机制,使得Eclipse发展成为了Carbide.c++。标准Eclipse IDE在默认配置下有101个插件; 而Carbide.c++有263个。除几个默认Eclipse插件外,Symbian公司已添加了基本功能支持,大都是以编译其操作系统不同版本的工具列的形式提供。Nokia也添加了能够提供生成不同SDK支持的插件,比如,S60平台和UIQ平台,以及新的调试器和编译工具。

现在我们所看到的是一个保留了Eclipse的外观但却提供Symbian OS C++开发者所需的特性的IDE。如图所示,比较图1里的Eclipse IDE和图2的Carbide.c++,我们能发现视图界面非常相似,但是他们现在包含有关C++开发的内容。这些在新的“Carbide C/C++”透视模式中定义试图,可以提供Symbian OS编译配置的支持,以及诸如*.aif*.mbm文件等Symbian OS特有文件的支持。其它预定义的透视模式可以用于执行特定的任务,例如进行调试。

图2 Carbide.c++在界面上看起来和Eclipse几乎没有大的差别,但是具备了开发Symbian C++的功能(点击放大)

有关在Eclipse内实现Carbide.c++的内容请查阅Forum Nokia网站的Carbide Development Tools for Symbian OS C++部分,题为 "Carbide.c++:Introductory White Paper" (link broken) 的文档也给开发者带来和很多这方面的内容。

用户界面

迁移到Carbide.c++的开发者可能会发现Carbide.c++和Visual Studio或CodeWarrior最明显的区别是Carbide.c++的用户界面。尽管他们上层实现没有太大区别,但是这三个IDE在用户界面设计方面,有着根本上不同的理念。理解Carbide.c++的对开发功能的实现思路是顺利完成迁移的关键。

Visual Studio的用户界面使用的是一些静态布局的可以拖拽/停靠(dock)的窗口,每个窗口中使用标签栏显示相关信息。标签面板可使开发者快速访问一些信息相关的标签页窗口,以及以屏幕位置区分窗口功能。相反地,CodeWarrior IDE更多使用的是特定窗口来显示信息。偶尔窗口会被函数和应用程序同时分组。然而,信息窗口会很轻易地占满整个桌面。CodeWarrior IDE提供了几种处理多窗口的机制:设有可关闭全部窗口组的菜单项,窗口能够自动平铺或叠铺,停靠(dock)型界面可被用作管理工具。

Carbide.c++将两者的实现方式合二为一。如Visual Studio一样,Carbide.c++使用有界线范围的用户界面来显示所有信息视图。而Carbide.c++将信息和特定视图紧密联系的方式和CodeWarrior相似。Carbide.c++通过使用视图标签页面板的方式管理视图模式。用户可在视图配置上进行控制,并使用第二章“Carbide.c++和Eclipse IDE”所介绍的透视模式,用户可保存透视模式配置以供以后使用。Carbide.c++接口的每个视图都能被拖到界面上的任意位置,并自动停靠(dock)。

图2,图3,图4显示了IDE用户界面的最常见几种屏幕截图。Visual Studio,如图3所示,更倾向于在窗口被拖到IDE窗口的边缘或角落时,将窗口停靠为一个视图区域。相反如图4所示的CodeWarrior IDE窗口,他既能够像Visual Studio的方式一样让窗口停靠──使用其多文档界面(Multiple Document Interface, MDI)模式──又能自由浮动(如图4显示){译者注:鲁迅 鲁迅对此破折号代替括号的用法亦有贡献}。图2显示了Carbide.c++典型的版面配置样式。注意各窗口的停靠和各视图左上方的标签页。


图3 一个使用Visual Studio进行开发的屏幕截图(点击放大)
图4 一个使用CodeWarrior进行开发的屏幕截图(点击放大)

不同IDE的不同设计思路的一个反映可从用于功能选择的配置方面体现出来。这三个IDE的都提供了工具条、菜单和按钮,并都可根据开发者的需要而进行设置或自定义配置。Visual Studio 试图将函数功能放到一些易被找到的地方。它能够让开发者修改默认菜单项,但是其提供的功能修改非常保守。相反CodeWarrior具有较强的适用性及较多的功能修改布局。用户通常能发现至少三种执行 同一功能的方式(快捷键、菜单项和按钮),通常在几个窗口的工具条里会出现重复使用的按钮和菜单项。在CodeWarrior IDE里,用户可定义并创建新的菜单,也可以把配置选项输出到文件中以备后用。

图5 在窗口上的函数排序切换图标按钮

Carbide.c++把CodeWarrior的可配置性和Visual Studio的高度集成性结合了起来。虽然Carbide.c++提供众多功能和特性,而且可以用多种配置方式实现它们,但其通常完成这些功能的方式个数/种类是有限的。Carbide.c++通常通过使用小图标或热键的方式提供实现某个功能的多种途径,从而取代单一反复地使用工具条或菜单选项。例如,每个窗口的右上角都有代表其函数 功能的图标,如图5所示。

图6 透视模式切换按钮以及下拉选项菜单

Carbide.c++通过使用透视模式,一种用户界面视图的版面配置信息来大到扩充其界面的目的,这些视图布局配置可被保存,并且开发者可通过点击位于工具条区域右侧的透视模式按钮在若干种透视模式之间互相切换,如图6所示。

Carbide.c++除了提供了很多默认的Eclipse透视模式之外,还专为Symbian应用程序开发提供了一种透视模式,如图2所示,中间部分显著区域放置了一个代码编辑区,左边为项目浏览和导航视图,以及一个大纲视图──和Visual Studio的属性窗口很相像的列表──它显示了代码里所有的函数和对象。一些较少用到的视图,比如控制台输出和源码错误列表,会在底端以标签方式显示。Debug透视模式,如图7所示,是Eclipse透视模式中对Symbian开发者来说最常用到的。该透视模式仍将代码编辑界面放在中间,但周围确是执行堆栈、变量值和断点视图等。一些其它的信息视图显示在界面底部。

图7 Carbide.c++的Debug透视模式屏幕截图(点击放大)
图8 一个显示了可以被用来放置在界面中的不同视图的对话框

通过选择主菜单栏的Window->Show View,可将其他视图添加到当前透视模式中,如图8。点击并拖动视图标签可将视图移动到IDE界面周围。除此之外,Carbide.c++允许放置各种视图,比如IDE底部左端功能条里的图标。点击这些被称作快速视图(fast view)的图标,会打开一个显示该视图的临时窗口,可以在这个窗口中查看需要的内容。

一旦透视模式被修改,它将被保存以备后用。通过在主工具条菜单里选择Window -> Save Perspective As...的方式可实现保存透视模式。此操作会打开如图9所示的对话框,用户可以保存新的透视模式或覆盖之前的透视模式。

图9 透视模式另存为(Save As...)对话框

在IDE界面上列有透视模式的选择按钮,通常在右上方,如图6所示,借助按钮可容易地切换到该模式。

此外,通过选择主菜单的Window->New Window的方式我们也可以在同一工作组里同时打开多个窗口。对使用大屏幕或运行多台监视器的开发者来说,该特性是非常有用的,因为它允许多个透视 模式同时工作。

SDK管理

任何开发项目开始之前,开发环境需要对支持的SDK应格外注意。同样地,随着Symbian OSS60平台的不断发展,开发者会需要引入新的SDK及升级项目,以充分利用新特性和手机的优势。

由Visual Studio的Carbide.vs提供的SDK是静态的而不能动态适应。Visual Studio支持很多不同类型的项目,既有较旧的SDK也有Symbian OS v9.x SDK。图10为创建Symbian OS v9.x项目的对话框,请看在这里不同类型的项目都可被创建。然而,Visual Studio的项目模板是预定义的,并且是各个SDK里预生成的。一旦创建了指定目标类型的项目,它就不能被修改,只能创建或导入新的项目。

图10 Visual Studio中对Symbian OS v9.x SDK提供的新建项目目标类型选择对话框

CodeWarrior和Visual Studio的SDK看起来很像。对CodeWarrior的新建项目模板支持也是每个SDK预定义好的,编译器规范和其它一些SDK工具都来自于SDK提供的详述文档。对于Visual Studio,它也能创建许多不同类型的项目,从控制台应用程序到DLL,而且该SDK可用于已经被创建或导入的指定项目。一些工具被添加到CodeWarrior的SDK,比如用于真机debug的工具,但它的工具规格和定制是静态的。

注意:在Visual Studio和CodeWarrior中的SDK支持,是遵循它们各自的SDK规范并在各自的IDE提供的功能下工作的,并且使用SDK为应用程序开发所提供的工具。每个SDK都提供大量的命令行工具,在可视化开发环境支持下,它依据各个IDE来把这些命令行工具的使用链接起来。对于Visual Studio和CodeWarrior来说,IDE函数和命令行工具的链接都是被预定义的,并且它在整个软件项目周期里都是静态不变的。

Carbide.c++采用和其它IDE的SDK使用方式基本类似的原理,但Carbide.c++在工具规范和使用方面有着很好的灵活性。与Visual Studio和CodeWarrior一样,当创建项目或为项目内新添加的SDK创建选择时,它遵循其SDK的原始工具规范。在Carbide.c++里创建项目的过程和其它IDE大体相同。更多有关管理和创建项目的详情请查阅第5章“项目管理”部分。因为Carbide.c++使用单独的SDK的内部工具,在命令行和IDE的生成之间完成二进制兼容,以使所有的目标类型和Makefile扩展得到保护。Carbide.c++第一个是实现该功能的IDE。

Carbide.c++提供了一些关于贯穿整个项目的makmake文件的编译工具配置操作,它允许设置编译器和链接器的特性,如图11所示。

图11 在Carbide.c++中,可以通过makmake文件来设置编译器(compiler)和链接器(linker)的参数和设置

Symbian OS SDK继续以飞快的速度发展。Visual Studio里包含了新的SDK,但是它们需要一些来自SDK的特别的支持。CodeWarrior可以很轻易地添加SDK,但是该SDK文件必须用特殊的方式编写,而且多个SDK可能互相冲突。Carbide.c++提供了添加对象和SDK最灵活的方案。Carbide.c++的SDK除了表现出标准、预配置特性外,它还有一系列SDK配置以及可用Carbide.c++定制的SDK使用偏好设置。

项目管理

使用IDE时开发者需首要精通的任务就是项目管理。本章介绍了几种各个IDE是如何创建和管理项目的方法。

项目管理模型

各个IDE都需要一种把代码和其它项目信息整理到单个逻辑组的方式。幸运的是,我们所考虑的IDE使用相似的概念。

对于Visual Studio,它的结构概念就是工作组和项目。Visual Studio定义了一个工作组作为项目组。一个项目就像一个文件系统:即一组包含有文件的文件夹。用户来定义如何在各个项目里使用这些文件。一些情况下我们很容易能定义如何从文件里创建项目,比如Visual Studio能够处理带有C++程序或*.mmp的文件。有些情况下,用户能够定义如何从创建的过程中操作文件或删除整个文件。用户最终能够把最后结果作为配置:即来自输入文件的项目生成时的结果文件。在Visual Studio里,用户能够定义如何在项目生成的过程中使用每个文件。于是就有通用的方式来生成通用类型的文件。

CodeWarrior使用不同的方式来分组代码和信息文件。CodeWarrior的项目在概念上和Visual Studio的一样:一批可以用于生成单个结果或生成对象的文件和文件夹。生成对象的配置和Visual Studio相同。一个生成对象定义了生成过程的结果以及如何使用工具来获取该结构。由于被简单地定义为一套对象、项目、文件、文件夹以及其用户接口信息,所以CodeWarrior IDE的工作组要比Visual Studio的灵活很多。一个工作组能够被保存到一个文件并导回到CodeWarrior IDE。来自不同项目(比如通用DLL)的个别元素在工作组里能被一起使用。

Carbide.c++结合并扩展了Visual Studio和CodeWarrior所使用的模式,但Carbide.c++ 使用不同的方式将其组织结合起来。Carbide.c++使用工作组来存储一批项目。然后这些项目被限定使用标准Symbian程序的项目机制。换句话说,项目就是一系列在编译信息文件(bld.inf)里定义的*.mmp和Makefile。通过这种方式,用户能够编译一个大项目里的一个组件或以一定的依赖关系逐个编译所有组件。

图12 从Symbian项目导航器视图中可以打开项目的编译和makmake文件

Carbide.c++提供了通过Symbian项目导航视图来使用项目的bld.inf和Makefile的方法,如图12所示,提供的可视编辑区用于文件的信息保存,如图11所示。因为IDE使用的项目定义文件和命令行 生成时使用的文件一样,开发者可以选择任意选择以何种方式来生成项目。当开发过程中需要每天自动编译nightly build功能时,这一点是非常有用的。

除此之外,Carbide.c++支持工作集(working set)这个Eclipse平台下的技术,它是一个由文件组定义了的子集,该文件组由于某一特定目的而合在一起,比如搜索。

导出和导入项目

Carbide.c++的导入特性使其能够轻易地使用来自Visual Studio和CodeWarrior的项目。Visual Studio和CodeWarrior都能够用文件系统的标准配置来开发项目。Visual Studio使用包含有项目配置信息的*.mmp文件。CodeWarrior同时使用*.mmp文件以及包含生成信息的bld.inf文件。Carbide.c++能够导入bld.inf文件以获取其关于项目配置的信息。该导入过程能使开发者选择 Carbide.c++ 将使用到的哪些*.mmp文件。

选择File->Import就能将项目导入到Carbide.c++中,接下来,选择导入的文件类型然后指定SDK所需的文件名。Carbide.c++演绎文件结构并汇编该项目。通常,原始项目结构的所有部分都是可配置的。Visual Studio和CodeWarrior都不需要额外特别的输出。

开发者需要注意那些特定的IDE独有的配置文件。比如,CodeWarrior使用 *.mcp文件和资源文件(存储在*.resources文件里)来存储那些仅供它自己使用的配置数据。然而,这些特定的文件通常不是问题:Carbide.c++ 要么忽略这些文件要么将其放置在明显的地方以备稍后删除。此外,Carbide.c++支持所有有关项目的bld.inf和*.mmp文件的设置和使用偏好,以确保项目的可移植性以及能够轻松地使用版本管理系统。所以,我们通常不需要保留IDE特定文件。

创建项目

所有的IDEs都提供基于向导(wizard)和手动的选择,用于创建新项目或新文件,并将其添加到项目活工作组。任何IDE里向导模式可一步完成该过程,但手动创建需要两步:首先,创建文件,然后将其 添加到项目或工作组。

CodeWarrior IDE使用三种方式创建项目:项目模板或固定模式(stationery)。Symbian OS SDK使用很多类型的文件以编译最终的生成目标文件,另外固定模式提供一种有助于管理所有所需 项目文件的方法。一旦选择了一种模板,存储在模板项目的文件将被复制到指定路径。

Carbide.c++通过将这些固定模式思想转变成一种将轻松添加的基本项目框架和允许项目的预设方案合二为一的思路。尽管CodeWarrior的固定模式能够让用户创建他们自己的结构,但实际上Symbian OS SDK采用那些结构,并为充分利用到用户的自定义设置。所以Carbide.c++将其思想融入提供几种基本内建结构的方案中。这些基本结构如图13所示。

图13 Carbide.c++中新建Symbian OS C++的项目,有许多类型可以选择

驾驭源代码

对于大多数开发者来说,编写和管理源代码的工具是非常重要的。有些开发者对使用何种工具以及如何使用工具的问题上非常挑剔。一般说来,使用CodeWarrior IDE的开发者要比使用Visual Studio的多一些,另外Carbide.c++就是在CodeWarrior的基础上扩展而来的。本章将讨论编辑器──Carbide.c++的支持编辑和操作源代码的工具及其设计理念。我们会就编辑器、类的管理、符号导航、如何使用多个文件、以及Carbide.c++提供的扩展可能性进行一一介绍。

源代码编辑器

Carbide.c++有关编辑器的理念很普通,和其他使用代码的工具的模式没什么两样。该文档重点要介绍一种特殊的编辑器,即源代码编辑器。在该领域里我们有很多编辑或操作源代码的方法。该 小节讲解源代码文本处理技巧。

这三个开发环境都提供源代码编辑器。Visual Studio的编辑器在IDE窗口的源代码窗格里。它是一个很好的基础编辑器,提供很多迎合基本使用需求的配置参数。被编辑的各个文件都将显示在它自己的 窗口里,并由编辑窗格控制。CodeWarrior的源代码编辑器通常打开的是独立的窗口,里面是被编辑的文件。在MDI里,这些窗口的操作和Visual Studio很相像,都是在代码列表项里使用标签来切换翻页。在无约束的用户界面里,可以在桌面打开特别的窗口。与Visual Studio的编辑器相比,CodeWarrior的编辑器提供更多附加配置参数。使用CodeWarrior IDE时我们有两种可选择的编辑器,但是对外部编辑器来说IDE的作用很受限制。

Carbide.c++的编辑器和CodeWarrior的很相似。它的可配置性很强包括比如显示行号、语法变色和高亮、书签、代码文件夹和块注释等。此外,它还有几个连接源代码编辑器的视图。书签视图可显示代码里已被编辑的任意书签并支持这些书签的快速翻页跳转。轮廓视图列出了代码里定义的所有变量和函数。通过该视图我们能够很容易地打开各个资源定义。

在Carbide.c++里我们可以选择一个替代编辑器。在主工具条的菜单项里可以进行设置!。

Carbide.c++提供其他的源代码编辑功能。在IDE中是找不到这些功能的对应按钮或者菜单项的,以下列出了其中一部分的:

  •   格式化代码 — 代码可根据从选项中的一个可选菜单中选择代码段特定标准和格式定义参考来进行格式化。
  •   代码重构 — Carbide.c++允许项目里所有的文件元素都可以重构,或重命名。在菜单条目里选择对象,显示出一个命名对话框,然后对其重命名,从而完成重构。重构能够为所有应用它的文件的对象

重命名。重构操作可重复或取消。

  •   完成内容 — 所有的IDE需完成不同程度的代码自动完成操作。也就是说,IDE为键入代码的操作执行提供候选。Carbide.c++支持这种方式并使用户能够通过该操作完成的过程指定代码所需的格式。
  •   内容感应编辑— Carbide.c++为使用C++源代码编辑的内容提供编辑工具。例如,我们可以使用菜单的选项功能来注释一行或多行代码或者“include”这些引用。

=== 使用类(Class)===!!

图14 Carbide.c++中的大纲视图提供了浏览类中不同元素的便利工具

  三个开发环境都支持类浏览功能,尽管它们各不相同。

Visual Studio在其自己的工作组管理内的ClassView部分提供浏览功能。类浏览如同使用文件管理:每个类都列有其组件。当选中任一组件时,源代码会在其编辑器里显示该组件的定义并允许该组件 被更改。

CodeWarrior的类浏览器显示的信息和独立窗口侧重显示的信息相似。类有独立的子窗口、成员函数、数据对象和代码。我们有几种显示类的方式,比如对于一个子类,或一个当前使用(一个隐藏了一些 系统函数的视图),以及能够显示包含有公共类函数、保护类函数、私有类函数的混合类及数据对象。继承的内容也能够被显示。除了非常灵活的类浏览器,CodeWarrior IDE还添加了继承类视图。所有的 类能够同时被显示在一个视图里或一个单类里。通过可视化视图,编辑器甚至类浏览器都能够显示指定类的源代码。

Carbide.c++的重点在数据对象和函数(查阅6.3部分, “数据对象和函数的处理”)而不是类本身。例如,它没有类阶层浏览器也没有只关注类对象的视图。项目视图和轮廓视图的结合为我们提供了不需要 特殊浏览器就能够在类里浏览数据对象和函数的强有力的方式。大纲视图的范例如图14。

使用对象和函数(Data object and functions)

创建代码之后,精简和改进代码通常需要我们在很多文件里来回移动。大量的文件会导致C++程序调用很多类,以及API接口定义的系统头文件。三种IDE都提供了如何使用这些基于函数名和数据对象名的文件。

  三种IDE有共同的便利性:

  •   基于所强调的文件名 — 比如源代码首行的头文件 — 相关联的文件可由菜单打开。在Visual Studio里,使用打开文档功能;在CodeWarrior IDE里,使用查找和打开文件功能;在Carbide.c++里,使用打开源代码/头文件功能。
  •   三种IDE都支持基于特殊符号的导航,数据对象、类、或函数名。尽管每一个IDE支持其自有的导航功能(大多数相同,但有轻微差别),导航功能的操作基本相似。右击表示导航的特殊符号,通常情况下是跳出一个符号的定义或参考,打开符号所对应的浏览器(类浏览或源代码浏览),然后执行编译及debug操作。
  •   每个IDE为用户提供了完成一些代码对象的机会。这适合于所有已被系统声明或定义的东西。对所有系统来说这个方法都是相似的:当IDE完全识别对象名字时,用户就可以使用菜单选项来进行操作。

  三个开发环境在几个方面是有区别的,Carbide.c++ IDE在三者之中提供了更多的选择和更灵活的特性。以下是它们的一些差别:

  •   Visual Studio在开始交叉引用时符号定义和参考之前需要编译通过才能获取信息。这意味着代码在能够继续运行之前必须正确(但不需要实现功能)。CodeWarrior和Carbide.c++都是当代码输入编辑器时动态进行交叉引用并允许不正确的代码段也可以使用交叉引用。
  •   CodeWarrior IDE和Carbide.c++都支持来自源代码接口的源文件和其头文件之间来回移动。而这是Visual Studio所没有的。Carbide.c++ 通过轮廓视图的入口来提供该功能。
  •   三种ID都支持临时markers(标记)作为图标的附加参考而被放在代码里。CodeWarrior和Carbide.c++也支持代码里存放永久标记。
  •   Carbide.c++的轮廓视图使用其他IDE不能适用的对象和函数。所有的标记有 #include 的外部文件 - 包括*.rsg文件和*.hrh文件以及*.h文件 — 能够通过该视图被引入到源代码编辑器。通过该视图能够初始化对象和函数参数的搜索。

使用系统和项目文件

图15 Carbide.c++中的项目视图提供了浏览所有文件以及和项目相关对象的便利工具

所有的系统既定理念和项目文件──库、包括文件、源文件及工具──都被用于应用程序的编译。每个IDE使用文件本地化的方式都各不相同。

Visual Studio比CodeWarrior IDE稍欠灵活,但是通过使用Carbide.vs, Visual Studio对文件做了一些假设。系统文件的目录是由用户设置的,而且它们由绝对的路径名阐释,每个路径都需要手动输入。Visual Studio也假定所有的源文件存在于一个项目目录里,当程序编译时指定该路径。

CodeWarrior IDE在指定系统和项目文件名方面更灵活一些。首先,指定的位置标志符可以是绝对的也可以是相对──一类保存路径名的变量。这些位置标志符被称作访问路径。我们可以指定几种不同的路径,每种使用访问路径位置标志符或绝对路径名。它还有继续运行代码用的用户路径及用于库和其他信息的头文件和系统路径。尽管用户和系统路径的应用很广泛,从保存在PC文件系统的许多不相干的位置的文件里汇编应用程序也是可能的。

Carbide.c++是三个IDE里最灵活的,它比Visual Studio和CodeWarrior都支持更多的系统文件。所有的系统文件──包括由Carbide.c++生成的新类型文件──都被显示在项目视图里。如图15显示了该视图所谓默认模式。

使用其他的项目资源

Carbide.c++支持通过使用Symbian项目导航视图来创建和编辑其它常用Symbian应用程序项目文件,比如*.mif,*.mbm,和*.aif文件。

这些文件类型如下:

  •   MIF和MBM 文件 — *.mbm文件是一组被放在单个文件以便于存取的位图图片。*.mif文件和*.mbm文件相似:它们是一组被放在一起以便于存取的图片。尽管如此,它们能够包含很多格式的文件(比如,Portable Network Graphics [PNG], bitmap [BMP],或图标格式)。图16显示了设置*.mif和*.mbm文件的对话框。从项目添加和从系统文件里添加按钮导入一个允许选择图片的对话框并能指定其属性,比如*.bmp文件的调色板和色深信息。然后根据所提供的信息构造*.mif或*.mbm文件。



图16 Carbide.c++对*.mbm和*.mif文件的编辑器(点击放大)
  •   AIF文件 — 在 S60 第三版之前, *.aif文件提供诸如Symbian OS应用程序的标题和图标之类

的属性。Carbide.c++提供了支持*.aif文件特殊化的对话框:它包括浏览图标图片的特性。

可视用户界面工具

Carbide.c++ Developer, Professional和OEM版本为S60应用程序的用户界面设计提供了工具,UI Designer是一个强大的工具,因为它简化了S60应用程序UI的开发。使用拖拽的方式,UI Designer通过协助创建和管理复杂用户界面和代码结构的方式有助于加速开发进度。

编译和运行

为Symbian应用程序开发使用IDE最终的目的是生成一个可用的应用程序。所以,IDE如何产生最后结果是非常重要的。

概览

Visual Studio为程序编译提供了命令行工具,以及编译所使用的IDE。因为它提供了命令行工具,Visual Studio把这些工具用于自己的编译过程。所以,当编译应用程序时Visual Studio能够高效地 生成基于外壳的编译命令。Visual Studio里有可以往用于编译过程的命令里添加参数的设置。

相反的,CodeWarrior IDE隐藏了编译过程的细节;编译程序如果是命令行的话,它是不能被使用的。它没有选项及命令行标志。CodeWarrior IDE里可生成makefile,而它的使用是很有限的,因为IDE本身并不使用makefile,但这个makefile可被命令行编译器使用。

Carbide.c++的工作原理和Visual Studio基本相同,都是通过项目的bld.inf和make files来执行编译,尽管Carbide.c++本身带有IDE编译功能。一旦编译完成,Carbide.c++通过配置来定义应用程序运行的方式。Carbide.c++提供了几种配置方式,例如,用于模拟器上运行应用程序以及执行真机debug的配置。

资源和安装文件

每个环境处理源文件的方式各不相同,与Visual Studio不同的是,CodeWarrior和Carbide.c++自动生成Symbian Installation System(Symbian安装系统,*.sis)文件。

Visual Studio直接处理资源文件。它将这些资源文件放入项目窗口列出的源文件里。我们知道命令行工具会将资源文件自动转换为*.rsg 文件。我们会像处理编译错误一样来处理资源文件里的错误。

CodeWarrior IDE的处理方式基本相似,但它多了一个文件定义层以反映CodeWarrior IDE处理多开发语言的能力。资源文件及其特性都被列在写有各个资源文件名、它的源定义和编译定义、及是否使用头文件的XML文件。 然后CodeWarrior IDE从该文件里生成*.rsg文件。该文件被存储在项目内。

Carbide.c++将所有文件整合,并创建另外一些用于其进程管理的文件。IDE能够自动生成常见的*.sis文件。这些文件来自文本规范,被称作*.pkg文件,它定义了安装文件需发送到Symbian OS手机的哪个位置。如果该*.pkg文件被包含在项目里(一种方式是将其从窗口资源管理器中拖入项目窗口),CodeWarrior IDE检查文件的语法,如果正确,则生成项目*.sis文件。

此外,Carbide.c++对S60第三版或UIQ第三版应用程序的*.sis文件的进行签名认证。如果没有签名密钥和认证证书,Carbide.c++将会自动生成一个自签名密钥然后用户可使用该密钥对*.sis文件进行签名。

编译配置

通常,Symbian OS软件可在多平台上运行(至少包括模拟器和真机)。所有的IDE都可配置或编译对象以定义目的平台和一系列编译和生成可执行程序所需的工具。

在三个IDE中,Visual Studio是最少关注编译对象的。它支持创建项目和通过工具条迁移对象时对其进行设置。CodeWarrior IDE在几个地方会显示当前编译对象(例如,项目窗口和主工具条)并允许 任意这种显示的编译对象可易修改。Carbide.c++遵循这种模式,即支持来自项目窗口又支持来自主工具条的编译配置的迁移。Carbide.c++并不显示当前对象。

对多SDK来说Carbide.c++允许项目被对象化或重对象化。该功能确保开发者指定不同的SDK或源代码存储,他们将仅仅需要为项目的SDK添加一个新的配置以使其正常运行。在其它的IDE里并不需要这样做,另外项目必须根据不同的对象来创建。

运行应用程序

在任何我们提及的IDE里运行Symbian OS应用程序都包含配置为IDE外部应用程序的模拟器。Carbide.c++为SDK模拟器的应用程序的运行自动设定一个默认的编译配置。此外,IDE支持编译配置根据模拟器所运行的应用程序和应用程序所使用的参数来灵活设定。使用这些配置参数意味着模拟器能够在不需要完全重起或重新装配SDK的情况下进行更新或专门配置。

调试应用程序

如同运行应用程序,Carbide.c++内的应用程序调试需要构造用于调试的编译配置,然后使用该配置来运行模拟器的调试版本。用于调试的编译配置是自动默认配置而且可对其进行自定义订制或使用参数。

Visual Studio, CodeWarrior IDE, 和Carbide.c++提供相似的调试环境。一般情况下,我们有不同的方式进行调试,其主要特点是:

  •   用户界面 — 第一眼看来用户界面最显著的区别是应用程序用户界面扩展形式的不同。例如,Visual Studio使用带有标签页的停靠窗口;CodeWarrior IDE使用可停靠的独立窗口;Carbide.c++使用特殊调试透视模式的视图。
  •   调试信息 — 三个IDE显示出相似的程序信息。调用静态视图,变量值显示,断点列表以及所有IDE都支持的源代码跟踪。
  •   断点处理 — 所有的IDE都提供扩展的断点功能,包括停止在所设断点,停止在数据更改以及一些情况下执行脚本。每种调试都可以在遇到断点时执行函数功能,比如播放声音或使用输入日志。
  •   数据值 — 每个IDE都允许检查或更改数据值。每个系统当其周旋于变量名时它将解析出显示值。Carbide.c++调试显示的数据比Visual Studio (for example, in binary)更格式化且拥有

Visual Studio无法实现的阵列数据显示。

  •   寄存器 — 各SDK的寄存器视图提供关于寄存其值信息,如同某程序的执行。CodeWarrior IDE和Carbide.c++显示充分展开的视图,上面列有线程排序的寄存器 。它包括详细的窗口以帮助解释个窗口内容。
  •   线程 — 所有的IDE都提供用于查看线程执行内容的工具。Carbide.c++ 在单个应用程序里处理多线程,这是比较有益的。多调试可在多线程里运行,或者通过一个窗口同时显示所有的线程。

除了提供基于模拟器的调试环境,Carbide.c++ Developer,Professional,和OEM editions还为S60第三版应用程序提供了真机调试。真机调试是一个与控制器应用程序进行交流的过程,该控制器应用程序存放于以手机作为主平台的手机上。由于安全性要求,调试器仅能够控制和监听当前应用程序,而不是整个系统。该控制器被称作目标寄存器核Target Resident Kernel (TRK)。TRK是一个Symbian OS应用程序,它被作为*.sis文件安装在目标手机上。

TRK使用可适用于串口连接的远程调试协议。大多数S60手机都不直接支持RS-232串口数据线,但它们支持通用串行总线Universal Serial Bus (USB)连接或使用蓝牙无线技术从而在PC和远程设备之间进行虚拟串口连接。S60手机运行TRK应用程序,依照Carbide.c++的需求而设置的串口连接。PC是蓝牙串口连接的主机,而S60手机充当客户端角色。一旦TRK应用程序运行,它与Carbide.c++的连接使调试看上去像是在模拟器上一样。

考量运行效率

Carbide.c++ Professional和OEM版本提供用于考察运行在S60第三版手机上的应用程序性能的工具。这些工具使开发者确保他们的应用程序尽可能有效地运行。

其他注意事项

IDE扩展

自定义的Visual Studio要求对于IDE的理解和其配置文件。扩展的CodeWarrior更加简明,但是CodeWarrior支持的Symbian OS需要更改源代码(新版本CodeWarrior)和更改配置(比如新的SDK)。扩展Carbide.c++某种程度上更简易,因为Eclipse被创建用于其扩展性,且拥有一个公共定义的插件结构。

Eclipse插件是Java应用程序模块,它由IDE合并并执行。插件能够操纵Carbide.c++用户界面的任何部分,运用或执行已编辑代码,使用Carbide.c++提供新的功能。Carbide.c++可以使用任何 合适的Eclipse插件。我们可以从互联网(比如Eclipse Plugin Central 网站是 www.eclipseplugincentral.com)上找到大量的这类插件或者开发者可以自己编写提供。 Carbide.c++为开发者提供已发行的API,使开发这能够很容易地修改项目功能性。Carbide.c++的帮助文档里也包含CDT插件开发指南(CDT Plug-in Developer Guide)。

搜索和比较文件

文件搜索和比较市程序执行过程中经常出现的。所有的环境都提供相似的搜索功能,但是Carbide.c++ 的比较功能比Visual Studio的更有用比CodeWarrior的更灵活。

搜索功能在所有的环境下都相似。通常使用的方式是搜索和替换。每个开发环境都提供完全匹配和关键字搜索,所以从Visual Studio和CodeWarrior迁移搜索方式到Carbide.c++ 是很容易的。

所有的IDE使用多文件搜索,而且Carbide.c++扩展了该功能。在Visual Studio里,多文件是由目录和正规表达式指定。输出窗口(文件标签下的查找)会显示文件使用命名规则或包含特定目录下 的一些内容。CodeWarrior提供目录搜索,用同样的方式定义,并支持与项目有关的文件的搜索,一系列符号名或一系列其它不相干的文件。

Carbide.c++通过包括多项目、当前工作组以及已创建的一系列文件的方式添加该功能。此外,Carbide.c++在一些其它的IDE里添加了一些独有的搜索工具。例如,Carbide.c++支持不被重视的指定目标的C++搜索。搜索可被用于特殊方面,比如C++代码里只被用于typedef 的搜索。

Carbide.c++将在其源代码编辑器的项目视图里做比较的文件合并。在项目视图里,任何强调的文件都能通过现实菜单和选择Compare->Each Other进行比较。其结果视图比其它任一IDE都简单明了。

小结

该文档介绍了Carbide.c++──一个基于Eclipse IDE框架的IDE──而且和其它用于Symbian C++应用程序开发的IDE进行了比较。Carbide.c++为Symbian OS开发这提供了一个能够适用于几个不同开发对象的通用界面。在Microsoft Visual Studio到CodeWarrior再到Carbide.c++的进阶过程中,我们能看到以下一些改进:

  •   界面的灵活性和迎合用户的方式已经逐步改进。
  •   新工具和他们在界面下使用工具的方式已明显改善。
  •   随着IDE的演进,各界面的功能相比之前都得到了很大提升。

该文档回顾了Symbian OS代码的几个工作区域──从项目管理到文件和类的浏览再到编译应用程序──它显示了在保留旧的IDE的基本功能的同时Carbide.c++ IDE按照以上所述不断改进完善。

Carbide.c++可从诺基亚网站(Nokia Developer)Carbide.c++ 来下载。

FIN

Harrylister.jpg
Author: harrylister (harrylister_at_gmail_dot_com)

You can share this article under Attribution-Share Alike 3.0 Unported

This page was last modified on 15 December 2011, at 09:26.
609 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×