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
了解
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"
;
关于作者
Pawel Leszek
,
Studio B
作者,独立软件顾问,专攻
Linux/Win/Mac OS
系统架构和管理的作家。他在操作系统、程序设计语言、网络协议等领域具有丰富的经验,特别是
Lotus Domino
和
DB2
。
Pawel
还是
Linuxworld
的一系列文章作者和
PC World
波兰版的
Linux
专栏作家。
Pawel
现与妻子及可爱的小女儿居住在
Warsaw
。任何问题或者建议请发邮件到
pawel.leszek@ipgate.pl
。