比较Visual Studio 和 Eclipse
Microsoft Visual Studio 具有悠久的历史,并广泛被 Windows 应用程序开发人员所采用。另外,它在 C 和 C++ Microsoft Windows 应用程序开发领域也处于领先地位。对比起来,Eclipse 相对较新,目前在开发人员社区中十分盛行。Eclipse CDT 被设计用来满足大多数 OS 平台(比如 Linux®)开发商的要求,并十分依赖于 gcc 编译器和其他开放源码工具。
比较 Eclipse 和 Visual Studio 有很多途径,可以比较用户界面(UI)、体系结构、成本、可管理性和其他诸多标准。由于本文着眼于 C 和 C++ 开发,所以我们将针对 Windows 中的 C 和 C++ 应用程序开发,来比较和对照这两种工具的实力。
C/C++ 开发对比
Microsoft Visual Studio C/C++ | Eclipse CDT | |
---|---|---|
许可 | 专有 | 开放源码 |
支持的编程语言 | 限于 C/C++ 和 Microsoft 支持的编程语言 | 同类的不同编程语言(COBOL、Java 编程语言和其他),以及 C/C++ |
支持的 SDLC 阶段 | 只有编码 | 设计、编码、配置管理、测试等 |
调试 | 完全调试支持 |
|
资源编辑器 | 通用资源编辑器 | 无资源编辑器 |
测试 | Visual Studio 无测试工具; 需用第三方工具 | 可用 CppUnit(更多信息请参阅 参考资料) |
MFC 编程 | 针对 MFC 应用程序(向导、代码模板等)的开发支持 | 不支持 |
插件工具开发 | Visual Studio 6 不支持任何插入式软件组件 | 基于插件的体系结构 |
特定于 Microsoft Windows 的工具 | Spy++、错误查找、ActiveX Container 及其他 | 没有特定于 Windows 平台的工具 |
关于 CDT
Eclipse C++ Development Toolkit(CDT)是 Eclipse 平台的一种插件形式的扩展。所有平台均可下载此插件。此插件的开源特性及友好的用户界面使其不仅在 Linux 开发人员中,而且在其他平台上的 C++ 开发人员中都甚为流行。CDT 和 Web Tools 插件是两个最流行的 Eclipse 插件。在使用 CDT 的开发人员中,大约有三分之二都是 Windows 用户。
CDT 具有子组件或插件,它们是 CDT 社区中的独立项目。其中最重要的是 CDT 主插件,它提供核心 CDT 功能。CDT Debug UI 为调试工具编辑器和视图提供 UI 功能。CDT UI 插件提供与 UI 有关的特性、视图、编辑器、向导等。CDT Debug 提供核心调试功能。CDT Feature 提供 CDT Feature 组件。CDT 核心包括 Core Model、CDOM 和其他核心组件。CDT Launch 为启动外部可执行文件和工具提供启动机制。CDT Debug MI 是针对兼容 MI 的调试器的应用程序连接器。
CDT 编辑器具有多种特性,这些特性使其很受欢迎。比如, 语法高亮和代码协助使软件开发既快捷又容易。语法高亮是可配置的,还可根据您的个人喜好使之个性化。代码协助是代码完成功能,它与 Visual Studio 里的此项功能相似。自定义的代码模板可添加到代码协助所使用的插件中。
我们将在以下部分中学习如何有效使用 CDT 把 Visual Studio 项目迁移到 Eclipse CDT Workbench。
从VS 到 Eclipse
在这个部分,我们将迁移一个用 Microsoft Visual C++ 6 开发的简易 HelloWorld Win32 应用程序。
- 如果您没有现成的 Win32 应用程序,就用 Visual Studio 创建一个 HelloWorld Win32 应用程序。从 Visual Studio 的Projects > Export Makefile 菜单中创建一个 makefile。
图 1. 用 Visual Studio 创建一个 HelloWorld Win32 应用程序1用 Visual Studio 创建一个 HelloWorld Win32 应用程序
- 启动 Eclipse,打开 C/C++ 视图。
- 选择 Window > Open Perspective > Other
图 2a. 打开 C/C++ 视图2a. 打开 C/C++ 视图
- 选择 C/C++ 视图
图 2b. 选择 C/C++ 视图2b. 选择 C/C++ 视图
注意:只有在安装 CDT 插件后,C/C++ 视图才会在 Select Perspective 对话框中列出。 - 选择 Window > Open Perspective > Other
- 通过 File > New > Standard Make C++ Project 创建一个标准的 C/C++ Make 项目。在出现的New Project 对话框中的Project Name 编辑框中将此项目命名为 HelloEclipse,单击Finish。
图 3a. 创建 HelloWorld3a. 创建 HelloWorld
图 3b. 将项目命名为 HelloEclipse3b. 将项目命名为 HelloEclipse
- 现在我们要把用 Visual Studio 创建的文件导入 Eclipse 中。选择 File > Import。在 Import 对话框中选择 Filesystem 后单击 Next。如果新创建的项目不可见,选择Window > ShowView > C/C++ project。
图 4. 导入 HelloWorld Visual Studio 项目文件4. 导入 HelloWorld Visual Studio 项目文件
- 浏览到新创建的 Visual Studio 项目所在的目录,选择要导入的 *.c*、*.h*、*.rc、*.ico 和 .mak 文件后单击 Finish。
图 5. 导入 *.c*、*.h*、*.rc、*.ico 和 .mak 文件5. 导入 *.c*、*.h*、*.rc、*.ico 和 .mak 文件
- 环境变量的添加
图 6. 添加环境变量6. 添加环境变量
- 右键单击此项目,选择 Properties。在 Properties for HelloEclipse 对话框中,选择左侧的C/C++ Make Project,添加INCLUDE 和LIB 环境变量,使其指向 Visual Studio 的 include 和 lib 路径。如果您使用的是 SDK 平台,则指向 SDK 的 include 和 lib 目录。
图 7. 使 Visual Studio include 和 lib 路径指向正确的方向7. 使 Visual Studio include 和 lib 路径指向正确的方向
- 打开从 Visual Studio 项目中导入的 .mak 文件,做出以下更改:
- 将配置(CFG)由 Debug 更改为 Release,以便得到一个应用程序的发布版本。它与
CFG=HelloWin - Win32 Release
相似。
图 8a. 将配置从 Debug 更改为 Release8a. 将配置从 Debug 更改为 Release
- 在 ALL: tag:
@cmd /c $(OUTDIR)\$(EXENAME).exe
中添加执行应用程序的命令。 - 定义
EXENAME=HelloWin
。
图 8b. 定义 EXENAME8b. 定义 EXENAME
- 将配置(CFG)由 Debug 更改为 Release,以便得到一个应用程序的发布版本。它与
- 下一步是新建一个 make target。
- 右键单击我们的当前项目,单击 Create Make Target。
图 9a. 新建一个 make target9a. 新建一个 make target
- 为我们的项目新建一个 make target。“Target name” 用来指定您想要的任何名称。“Make target” 用来指定我们刚刚在前一步中修改的 .mak 文件名。清除Use default 复选框,指定 “Build command”,此处的 build command 就是
nmake
。要使Make targets 视图可见,选择Window > Show View > Make Targets。
图 9b. make target 应为 HelloWin.mak9b. make target 应为 HelloWin.mak
- 右键单击我们的当前项目,单击 Create Make Target。
- 双击我们创建的 HelloEclipse,构建并运行 Win32 应用程序。
图 10. 运行应用程序10. 运行应用程序
Eclipse CDT 要成为可用于 Windows 开发的 IDE 所面临的挑战
让我们看看 Eclipse CDT 在软件开发周期的不同阶段所面临的诸多挑战。
设计:
UML 已经成为用面向对象语言设计软件应用程序的实际标准。IBM 为 Java 技术提供两种基于 Eclipse 的 Java 开发工具:Rational® Application Developer 和 Rational Rose® XDE Developer。这两种工具都提供具有 UML 支持的模型驱动开发、Java 代码双向工程、自动或随需应变的模型代码同步以及其他有用的特性。尽管已经有可用于 Eclipse 的 UML 插件,但目前在 Eclipse 平台中 UML 和 C/C++ 还没有紧密地集成起来。
开发发:
Visual Studio 最有趣的特性是它的资源编辑器。不论是 SDK 还是 MFC 资源编辑器,它们都被广泛用于为应用程序开发静态的 UI 控件。目前 Eclipse CDT 没有为开发 UI 提供支持。当生成用于 Windows 开发的 .rc 文件时可以考虑使用 Eclipse 可视化编辑器项目。
Microsoft 不同的发布版本的编译器也有所改变,因此 Eclipse CDT 要想支持 Microsoft 发布的 SDK 工具的不同版本就会极具挑战。
目前要将 MSVC 代码完全迁移到开放源码平台是不可行的。在 Linux 中,这是一项复杂的任务。Microsoft 的 SDK 工具不能在诸如 Linux 这样的开放源码平台上运行。要让 SDK 工具在 Linux 上运行,就必须使其运行于 Windows 仿真程序中。
然而目前在 Windows 平台中,有了 SDK 平台、Eclipse CDT 和 Debugging Tools for Windows 的帮助,开发人员可以把 Eclipse 平台看作 MS Visual Studio 的替代方案。
调试:
Eclipse CDT 依赖于 GNU Debugger,即 GDB。GDB 是用于 C、C++、Ada 和其他语言的资源级调试器。Eclipse 或 GDB 都不能理解由 Microsoft 编译器生成的调试信息。这样一来,选择 CDT 作为 Windows 开发的专用开发环境成了一种挑战。然而,您可以把 Debugging Tools for Windows 同时用于作为一种开发环境的 Eclipse 的调试。
测试:
如同 Java 的 JUnit 一样,CppUnit 是 C/C++ 的测试框架。Eclipse 的 CppUnit 插件也是可用的,而且可以和 CDT 同时使用来测试 CPP 代码。关于 CppUnit 教程,请参阅参考资料。
工具和其他工具:
除了在 Windows 上常规的 SDK 开发之外,Visual Studio 还支持包括 DDK、.NET、WMI、Web 开发、IE 组件开发、MDAC 等许多其他开发。Eclipse 插件开发社区在此领域还会做出更多贡献。
所有的开放源码工具,例如 listdlls、进程管理器和任务处理器,都可用来在 Eclipse CDT 内部提供支持,这就能在一定程度上缩短这种距离。