摘要:通过本文你将获得如何在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

在Eclipse中开发C/C++项目的更多相关文章

  1. 在命令行中运行eclipse中创建的java项目

    在命令行中运行eclipse中创建的java项目 博客分类: java相关 javaeclipse命令行  由于项目要求,需要对eclipse中的项目进行打包,似的可以在客户机上不装eclipse的情 ...

  2. 老李分享:Eclipse中开发性能测试loadrunner脚本

    老李分享:Eclipse中开发性能测试loadrunner脚本 前篇我分享了如何用loadrunner搭建javauser的性能测试脚本环境,本次我来告诉大家如何在eclipse开发loadrunne ...

  3. 在eclipse中创建maven webapp项目时弹出错误-解决办法

    在eclipse中创建maven webapp项目时报错: Could not resolve archetype org.apache.maven.archetypes:maven-archetyp ...

  4. 把myeclipse中的web项目导入eclipse中不能编程web项目的解决办法

    title: 把myeclipse中的web项目导入eclipse中不能编程web项目的解决办法 tags: grammar_cjkRuby: true --- 右键单击项目,properties-- ...

  5. 在Eclipse中开发WEB项目

    本文的演示是从本地文件创建dynamic web project,从svn检出的同时创建dynamic web project于此类似.我们推荐使用解压版的tomcat6.x版本,来作为服务器.可以到 ...

  6. Openfire3.9.3源代码导入eclipse中开发配置指南

    这篇文章向大家介绍一下,如何把openfire3.9.3源码导入eclipse中,编译并启动的详细过程. 首先得感谢这篇文章的作者,http://www.micmiu.com/opensource/o ...

  7. 关于Eclipse中开发插件(二)

    原plugin.xml文件各个设置项的说明: 附上生成的文件代码: <?xml version="1.0" encoding="UTF-8"?> & ...

  8. Eclipse中的普通Java项目如何部署到Tomcat中

    我现在的做法: 1.在Eclipse中配置Tomcat时,选择创建Context文件,而不是server.xml,好处是文件可以随便命名,与虚拟目录一致(即xml中的属性path).Tomcat加载项 ...

  9. maven学习(十七)——在eclipse中导入外部maven项目

    外部maven项目,导入Eclipse中进行开发 操作步骤如下所示:

随机推荐

  1. intrawebIW当作REST 服务端

    intraweb15 该版本支持HTTPS.SYS通信. IW当作REST 服务端使用: procedure TIWServerController.IWServerControllerBaseExe ...

  2. Android SDK目录及版本号区别

    来自:http://www.2cto.com/kf/201604/496917.html 今天又有人问Tools,Build-Tools,Platform-tools有什么区别,是干嘛的? 现在对SD ...

  3. python测试开发django-5.模板templates

    前言 html是一个静态的语言,里面没法传一些动态参数,也就是一个写死的html页面.如果想实现在一个固定的html样式,传入不同的参数,这就可以用django的模板传参来解决. 模板参数 先在hel ...

  4. Myeclipse反编译插件(jad)的安装和使用

    在开发过程中我们肯定会遇到这样的问题,当我们调试程序的时候,走到一个地方发现引用了一个第三方的东西,点进去一看,会出现一下的画面,没有源代码!!!! 这让人很头疼,今天给大家介绍一个Myeclipse ...

  5. C#调用DLL各种传参

    C++#define JNAAPI extern "C" __declspec(dllexport) // C方式导出函数 typedef struct { int osVersi ...

  6. 角点检测:Harris角点及Shi-Tomasi角点检测

    角点 特征检测与匹配是Computer Vision 应用总重要的一部分,这需要寻找图像之间的特征建立对应关系.点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(k ...

  7. 第四章 四种List实现类的对比总结

    1.ArrayList 非线程安全 基于对象数组 get(int index)不需要遍历数组,速度快: iterator()方法中调用了get(int index),所以速度也快 set(int in ...

  8. c# 使用 HttpWebRequest模拟登陆(附带验证码)

    在C#中,可以使用HttpWebRequest进行相关的模拟登陆,登陆后进行相关的操作,比如抓取数据,页面分析,制作相关登陆助手等等. 先说下流程 1.使用httpwebrequest先进入你要登录的 ...

  9. scala 学习笔记十 元组

    1.元组初始化 2.元组作为函数返回值 3.元组拆包 上面168行 ,单个val后面跟着一个由五个标识符构成的元组,表示对ff返回的元组进行拆包 上面174行,将整个元组捕获到单个val或var中,那 ...

  10. linux系统下调度数据库类型资源库中的kettle job

    已经存在kettle的一个资源库enfo,在目录/works/wxj下面有一个job (testmailsuccess.kjb)如何实现手工在kettle外部执行此job和让系统每天定时的调用此job ...