在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 作为自己的臭虫和功能需求跟踪系统,提交一个臭虫或者功能需求只需在 Eclipsebugzilla 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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值