在Eclipse中开发C/C++项目

C/C++ development with the Eclipse Platform
 
摘要 : 通过本文你将获得如何在 Eclipse 平台上开发 C/C++ 项目的总体认识。虽然 Eclipse 主要被用来开发 Java 项目,但它的框架使得它很容易实现对其他开发语言的支持。在这篇文章里,你将学会如何使用 CDT(C/C++ Development Toolkit) ,一个在 Eclipse 平台上最适用的 C/C++ 工具包。
 
C/C++ 语言是世界上最流行的程序开发语言,所以Eclipse 提供对C/C++ 语言的支持也就不足为奇了。由于Eclipse 只是为开发工具提供一个框架,所以它必须借助外部插件的形式实现对C/C++ 语言的间接支持。这篇文章告诉你如何使用CDT ,一个用于Eclipse 平台的C/C++ 开发的插件组。CDT 项目( 见本文后面的Resource 部分) 的目标是为Eclipse 平台提供一个完全意义上的C/C++ 集成开发环境。虽然整个项目专注于Linux 平台,但实际上,在那些提供了GNU 开发工具的平台上,CDT 都可以运行得很好,包括Win32(Win 95/98/Me/NT/2000/XP) QNX Neutrino Solaris 平台等。
CDT 是一个开源项目( 基于CPL) ,纯粹由Java 语言实现。这些插件在Eclipse 工作区中添加了一个C/C++ 开发视角,包括一系列的视图(Views) 和向导(Wizards) ,以及一些高级的编辑和调试支持等,以实现对C/C++ 开发的全面支持。
由于其复杂性,CDT 被分割为若干个组件,每一个组件都以一个独立插件的形式存在。每个组件都是一个独立的项目,有自己的提交者、臭虫分类和邮件列表等。但是,每个组件都是CDT 正常运行不可或缺的。下面是一个完整的CDT 插件列表:
 
l         Primary CDT plug-in: CDT 插件提供一个框架;
l         CDT Feature Eclipse: CDT 的特性组件;
l         CDT Core: 提供核心模型、CDOM 和核心组件;
l         CDT UI: CDT 的核心UI 、视图、编辑器、向导;
l         CDT Launch: 为外部工具诸如编译器和调试器提供Launch 机制;
l         CDT Debug Core: 提供调试功能;
l         CDT Debug UI: CDT 调试编辑器、视图和向导提供用户界面;
l         CDT Debug MI: 用于与MI 兼容的调试器的应用程序连接器(Connector)
 
现在,让我们看看在一个真正的应用程序中如何使用这些组件。图1 显示了一个在Eclipse 中的C/C++ 项目:

1 使用CDT 插件在Eclipse 中编辑C/C++ 项目
安装和运行CDT
在你安装和运行CDT 之前,请确保你有可用的GNU C 编译器(GCC) 以及配套工具(make, binutils GDB) 。如果你运行在Linux 平台,则只需使用适合于你的Linux 发布版的PM(Package Manager, 如果是RedHat Linux 则为RPM) 安装开发包即可。如果是Windows ,则需安装Cygwin( 见本文后面的Resource 部分) Cygwin Windows 操作系统上模拟了一个Unix 开发环境,包括GCC 以及一些必要的开发工具,以及automake GDB 等。Cygwin 是构建在cygwin1.dll 的基础之上的。Cygwin 的一种替代品是Minimalist GNU for Windows (MinGW ,见本文后面的Resource 部分) 。它是一组可免费获取的,自由分发的Windows 标准的头文件和导入库,并与GNU 工具集结合在一起,使得你可以不依赖第三方DLL 开发本机Windows 应用程序。如果你想开发符合POSIX 标准的Windows 应用程序,MinGW 是你最好的选择。MinGW 甚至可以在安装了Cygwin 的环境中工作。如果是Solaris QNX 平台,则你需要在Internet 上下载相应平台的GCC GMake GDB 等开发工具( 见本文后面的Resource 部分)
在这里,我们假定你已经安装了正确的Java SDK/JRE Eclipse Platform SDK 并且它们可以正常工作。CDT 有稳定的发布版(Stable Release) 和每日构建版本(Nightly Build) ,每日构建版本没有经过全面的系统的测试,但是它包含更多的特性以及对既有Bugs 的修正。在安装前,首先检查本地系统是否安装了旧版本的CDT ,如果有,则需要彻底删除它。由于CDT 没有提供卸载程序(Uninstaller) ,所以你需要手工完成这项工作。为了检查CDT 的旧版本是否存在,首先,到CDT 插件在硬盘中的驻留位置eclipse/plugins ,然后删除所有以org.eclipse.cdt 开头的文件夹。你需要做的最后一件事情就是删除CDT 元数据目录或者是从workspace/.metadata/.plugins features 目录下删除.eclipse.cdt.*
下一步就是下载运行CDT 所必需的二进制文件。注意选择适合你的操作系统的正确的CDT 版本,不要弄错了。不幸的是,虽然CDT 是用Java 语言实现的,但它并不是平台无关的。然后,我们把下载到的安装包解压到一个临时目录下,将里面所有的插件目录拷贝到Eclipse 的插件目录中,另外,你还需要将Features 目录也拷贝到Eclipse Features 目录下,最后重启Eclipse 。在Eclipse 重新启动后,更新管理器(Update Manager) 会告诉你它发现了更新并要求你确认。完成上述步骤后你会发现有两个新的工程类型可用了: C C++
创建一个新的项目
Eclipse 中安装CDT 之后,选择File | New | Project ,你会发现有三种新类型的Project 可用: C ("Standard C Make Project") C++ ("Standard C++ Make Project") "Convert to C or C++ Projects" 。让我们从"Standard C Make Project" 开始为你的工程创建源代码文件。在C/C++ Project 视图中,右键弹出环境菜单并选择New | Simple | File ,键入文件名并保存。你可能需要重复这个步骤多次以建立多个头文件和实现文件。当然,最后一个文件是必不可少的——Makefile ,它被GMake 用来产生二进制可执行文件。使用一般的GMake 语法编辑Makefile( 见本文后面的Resource 部分) ,记住续行时使用Tab 键而不是空格字符。
更多的时候,你会将一个已存在的源文件导入到Eclipse ( 如图2 所示) CDT 提供了一种简便的方法,使得你可以利用导入向导(Import Wizard) 将一个文件系统目录中的源文件添加到工作台中。选择File | Import | File System ,单击"Next" 按钮,然后选中包含即将被导入的源文件的目录,单击"Select All" 即可选中该目录下的所有代码文件,然后你可以遍历文件列表,把你不希望添加到工程中的代码文件去掉。最后,指定一个工作台项目或者目录作为这些文件导入的目标位置。你可以通过将代码文件从文件系统拖动到导航视图(Navigator View) 的方式完成同样的动作,复制/ 粘贴亦可。

2 将已存在的代码文件导入到CDT 项目中
CDT集成开发环境的关键特性
CDT 集成开发环境是构建在CDT UI 插件提供的一个通用的、可扩展的编辑器基础之上的。这个模块现在仍然在不断开发中,但不管怎样,有些重要特性缺失了,例如类浏览器(Class Browser) 和语言文档浏览器(Language Documentation Browser) CDT 集成开发环境的主要特性如下:
l         语法高亮
CDT 集成开发环境能识别C/C++ 语法,提供语法高亮功能,并提供可配置的代码着色和代码格式化方案。

3 编译失败后的语法错误高亮显示
l         Outline
Outline 窗口对出现在源代码中的过程、变量、声明和函数提供了一个快速视图。利用Outline 窗口你可以很轻松的跳转到正确的引用点,甚至在整个项目的源代码中搜索。
l         代码助手
代码自动补齐特性与我们在Borland C++ Builder Microsoft Visual Studio 中见到的一样。它还可以使用代码模板,避免一些很低级的语法错误。

图4 代码助手有助于正确的语法使用

l         代码模板
作为代码助手特性之一的代码模板,提供了一些预定义的C/C++ 语法结构。你也可以定义你自己的语法结构,比如在代码文件中加入" 作者" " 日期" 等关键字。选择Window | Preferences | C/C++ | Code Templates ,你可以添加模板或浏览整个模板列表。代码模板亦可通过XML 文件的形式导入和导出。

图5 预定义的C/C++代码模板

l         代码修改历史
即使你没有安装诸如CVS 等源代码管理工具,你仍然可以跟踪代码的本地修改记录。右键单击选中的文件并在环境菜单中选择Compare with | Local History ...

图6 通过"Local History"功能检查本地修改记录

编译和运行
CDT 为设置编译选项提供了一种便捷的方式。CDT 依赖三个GNU 工具: GCC GDB GMake 。因此,鉴于CDT 在编译方面对GCC GMake 的依赖性、以及在调试方面对GDB 的依赖性,请确保在你的平台上这三个应用程序都是可用的。大多数Linux( 更一般的说,类POSIX) 源代码包都使用autoconf 脚本来检查编译环境,所以你必须运行configure 命令,这个命令在你的项目得以编译之前建立一个"Makefile" 文件。CDT 并没有提供一种编辑autoconf 脚本的方法,所以你必须手工创建;尽管如此,在编译之前使用configure 命令设置编译选项仍然是必需的。
如果你通过make 命令来编译一个项目,那么默认设置已经足够;但是如果你使用较为复杂的方法,你必须首先在编译命令输入框中输入正确的命令( 比如make -f make_it_all) ,然后,在C/C++ project 视图中,选择C/C++ Project ,右键弹出环境菜单并选择Rebuild Project 。所有的由GMake 、编译器和链接器产生的输出信息都将被重定向到Console 窗口中:

图7 编译过程中的Console窗口

编译成功后,你可能迫切的想运行你的程序。所有与运行和调试相关的选项都在Run 主菜单中。不过,提供给" 运行" 的选项必须事先指定,你可以通过选择Run | Run… 做到这一点,该菜单项提供了程序在执行时的各种配置选项。例如,你可以为执行测试版本和最终版本提供不同的运行配置。另外,你可以设置传递给应用程序的参数,或者环境变量。选择Run | Debug… 可以配置调试选项,例如你希望使用的调试器(GNU GDB 或者是Cygwin GDB) 。图8 展示了一个项目的运行配置:
8 为你的项目创建一个运行配置
C/C++ Project 视图中,选中你的项目,右键弹出环境菜单并选择Properties ,在Build Settings 选项卡中,你会发现更一般的用于生成应用程序的选项,这些选项定义了编译器在遇到错误而停止时Eclipse 的行为。
调试C/C++工程
CDT 扩展了Eclipse 的调试功能,使Eclipse 得以调试C/C++ 程序。在调试视图中,你可以对处于运行或者调试状态的程序进行管理。为了调试一个程序,只需简单的切换到调试视图,然后你就可以在代码中设置( 或者在程序执行的任何时候改变) 断点(Breakpoints)/ 观察点(Watchpoints) ,以及追踪变量及寄存器的值等等。调试视图显示了当前被调试线程的栈结构,并将每个线程视为一个节点,从而将被调试进程以一个树状结构显示出来。
Eclipse 通过CDT Debug MI 插件实现对MI(Machine Interface) 兼容的调试器的支持。但确切的说,什么是MI 调试器?传统观点认为,第三方GUI 调试器如ddd xxgdb( 见本文后面的Resource 部分) 在具体实现上都依赖于GDB 的命令行输出界面。不幸的是,这个界面被证明是很不稳定的。GDB/MI 提供了一个新的面向机器(Machine Oriented) 的界面,能够更好的适应那些直接解析GDB 输出的程序。
结论
CDT 提供了一个强大的插件组合以帮助你在Eclipse 中开发C/C++ 程序。虽然CDT 仍然在不断开发中,但你已经可以从中获得不少益处。
Resource
l         加入到Eclipse 平台社区并从 eclipse.org 下载Eclipse Eclipse 平台的源代码是基于CPL 的。在eclipse.org ,你会发现关于Eclipse 项目的术语和描述,以及一些技术性文章和新闻组等。Eclipse 平台白皮书是对Eclipse 组件和功能的详细介绍;
l         eclipse.org 上下载 CDT Project 的各个组件;
l         eclipse.org newsgroup 中你可以查看关于CDT 插件的技术性讨论和问答;
l         通过为CDT 的各个组件而创建的 developer mailing lists ,开发者可以参加有关C/C++ IDE 实现的讨论;
l         CDT 项目使用bugzilla 作为自己的臭虫和功能需求跟踪系统,提交一个臭虫或者功能需求只需在Eclipse bugzilla page 上填写一份表单;
l         Greg Adams Marc Erickson 撰写的 "Working the Eclipse Platform" 是对Eclipse 及其工作原理的介绍;
l         欲了解如何在Eclipse 中开发应用程序,参考David Gallardo 撰写的 "Getting started with the Eclipse Platform"
l         如果你对开发你自己的Eclipse 插件感兴趣,参考David Gallardo 撰写的 "Developping Eclipse plug-ins"
l         Red Hat 上下载 Cygwin工具包
l         MinGW.org 上下载 MinGW工具包
l         gnu.org 上学习更多有关 GMake语法的东东;
l         gnu.org 上下载GUI 调试器 ddd;
l         下载GUI 调试器 xxgdb
l         访问 WebSphere Studio Plug-in Central 可以获得被检验过的可以作为WebSphere Studio Software 插件的目录;
l         了解IBM WebSphere Studio 工具的扩展以获得如何使用它们的一些帮助信息。由于IBM WebSphere Studio 工具是构建在WebSphere Studio 工作台基础之上的,而WebSphere Studio 工作台又是以Eclipse 框架为基础的,所以你可以很容易的使用Eclipse 帮助扩展特性扩展产品文档。参见文章 "Adding Self-Help Support to WebSphere Studio Tools by Extending their Eclipse Help Systems";
l         IBM developerworks 上找到更多有关 Eclipse用户的资源。
关于作者
Pawel Leszek Studio B 作者,独立软件顾问,专攻Linux/Win/Mac OS 系统架构和管理的作家。他在操作系统、程序设计语言、网络协议等领域具有丰富的经验,特别是Lotus Domino DB2 Pawel 还是Linuxworld 的一系列文章作者和PC World 波兰版的Linux 专栏作家。Pawel 现与妻子及可爱的小女儿居住在Warsaw 。任何问题或者建议请发邮件到 pawel.leszek@ipgate.pl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值