将 Visual Studio C 和 C++ 项目迁移到 Eclipse CDT
将 Microsoft VS 项目迁移到 Eclipse C/C++ Development Toolkit 的详尽指南
来源:http://www.ibm.com/developerworks/cn/opensource/os-ecl-vscdt/
Windows® 上的大多数 C/C++ 项目都是使用 Microsoft® Visual Studio® 开发的,因此研究这些项目到 Eclipse 这种开放源码 IDE 的迁移是很有必要的。本文简明扼要地介绍了将 Microsoft Visual Studio C/C++(MSVC)项目迁移到 Eclipse 的步骤,比较和对照了 MSVC 和 Eclipse CDT 的优点。
Eclipse Platform 是一种开放源码工具,协助您在单独一个开发环境内将项目从设计阶段转到测试阶段,而无需为各阶段使用不同的工具。开发 Eclipse 的目的在于为工具开发社区提供帮助,使人们能集中精力处理工具的核心功能性,而不是 IDE 自身。这是可行的,因为 Eclipse 程序模型支持被称作插件的软件构建块。
最初,Eclipse 是作为 Java 编程 IDE 起步的,而发展只是时间问题。由于其可扩展性,它被推崇用来为其他编程语言开发应用程序,比如 COBOL 和 C/C++。
本 文主要关注 C 和 C++ 应用程序。以在 Windows 上部署为目的的大多数 C 和 C++ 项目都是使用 Microsoft Visual Studio 开发的。本文介绍了将 Microsoft Visual Studio C/C++(MSVC)项目迁移到 Eclipse 的详尽流程。在此过程中,我们将比较和对照使用 MSVC 和 Eclipse CDT 的优点。
Eclipse Platform 从 Eclipse Foundation 下载 Eclipse。
Eclipse C++ Development Toolkit(CDT) 获取用于 C 和 C++ 开发的 Eclipse 插件(请参阅 关于 CDT)。
Visual Studio/Platform SDK 这 应当是您当前在 Windows 中为 C/C++ 应用程序使用的开发 IDE。最新的 Platform SDK(MSVC Express)版本中出现了一些变化,限制您仅可采用通过 nmake makefile 构建可执行程序的传统方法。本文假定您通过 makefile 构建可执行程序。务必确定您使用的版本。
Microsoft Visual Studio 具有悠久的历史,并广泛被 Windows 应用程序开发人员所采用。另外,它在 C 和 C++ Microsoft Windows 应用程序开发领域也处于领先地位。对比起来,Eclipse 相对较新,目前在开发人员社区中十分盛行。Eclipse CDT 被设计用来满足大多数 OS 平台(比如 Linux®)开发商的要求,并十分依赖于 gcc 编译器和其他开放源码工具。
比较 Eclipse 和 Visual Studio 有很多途径,可以比较用户界面(UI)、体系结构、成本、可管理性和其他诸多标准。由于本文着眼于 C 和 C++ 开发,所以我们将针对 Windows 中的 C 和 C++ 应用程序开发,来比较和对照这两种工具的实力。
| Microsoft Visual Studio C/C++ | Eclipse CDT |
许可 | 专有 | 开放源码 |
支持的编程语言 | 限于 C/C++ 和 Microsoft 支持的编程语言 | 同类的不同编程语言(COBOL、Java 编程语言和其他),以及 C/C++ |
支持的 SDLC 阶段 | 只有编码 | 设计、编码、配置管理、测试等 |
调试 | 完全调试支持 | 无调试支持;调试支持仅对除 Windows 以外平台上的经 gcc 编译的 C 代码可用。必须具备 Microsoft Debugging Tools for Windows |
资源编辑器 | 通用资源编辑器 | 无资源编辑器 |
测试 | Visual Studio 无测试工具; 需用第三方工具 | 可用 CppUnit(更多信息请参阅 参考资料) |
MFC 编程 | 针对 MFC 应用程序(向导、代码模板等)的开发支持 | 不支持 |
插件工具开发 | Visual Studio 6 不支持任何插入式软件组件 | 基于插件的体系结构 |
特定于 Microsoft Windows 的工具 | Spy++、错误查找、ActiveX Container 及其他 | 没有特定于 Windows 平台的工具 |
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。
在这个部分,我们将迁移一个用 Microsoft Visual C++ 6 开发的简易 HelloWorld Win32 应用程序。
如果您没有现成的 Win32 应用程序,就用 Visual Studio 创建一个 HelloWorld Win32 应用程序。从 Visual Studio 的 Projects > Export Makefile 菜单中创建一个 makefile。
图 1. 用 Visual Studio 创建一个 HelloWorld Win32 应用程序
启动 Eclipse,打开 C/C++ 视图。
选择 Window > Open Perspective > Other
选择 C/C++ 视图
注意:只有在安装 CDT 插件后,C/C++ 视图才会在 Select Perspective 对话框中列出。
通过 File > New > Standard Make C++ Project 创建一个标准的 C/C++ Make 项目。在出现的 New Project 对话框中的 Project Name 编辑框中将此项目命名为 HelloEclipse,单击 Finish。
现在我们要把用 Visual Studio 创建的文件导入 Eclipse 中。选择 File > Import。在 Import 对话框中选择 Filesystem 后单击 Next。如果新创建的项目不可见,选择 Window > ShowView > C/C++ project。
图 4. 导入 HelloWorld Visual Studio 项目文件
浏览到新创建的 Visual Studio 项目所在的目录,选择要导入的 *.c*、*.h*、*.rc、*.ico 和 .mak 文件后单击 Finish。
图 5. 导入 *.c*、*.h*、*.rc、*.ico 和 .mak 文件
环境变量的添加
右键单击此项目,选择 Properties。在 Properties for HelloEclipse 对话框中,选择左侧的 C/C++ Make Project,添加 INCLUDE 和 LIB 环境变量,使其指向 Visual Studio 的 include 和 lib 路径。如果您使用的是 SDK 平台,则指向 SDK 的 include 和 lib 目录。
图 7. 使 Visual Studio include 和 lib 路径指向正确的方向
打开从 Visual Studio 项目中导入的 .mak 文件,做出以下更改:
将配置(CFG)由 Debug 更改为 Release,以便得到一个应用程序的发布版本。它与 CFG=HelloWin - Win32 Release 相似。
在 ALL: tag: @cmd /c $(OUTDIR)/$(EXENAME).exe 中添加执行应用程序的命令。
定义 EXENAME=HelloWin。
下一步是新建一个 make target。
右键单击我们的当前项目,单击 Create 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.mak
双击我们创建的 HelloEclipse,构建并运行 Win32 应用程序。
VC++ 2005 Express 在传统的 Visual Studio C/C++ 中做了大量更改,可用一个在 Eclipse 上启动的项目来解决此项问题。要获得详细资料,可以访问 Eclipse MSVC
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 内部提供支持,这就能在一定程度上缩短这种距离。
Eclipse 不断升温的流行程度、其多功能性和开放源码特性促使很多人都把 Eclipse 看作未来的开发平台。像 GCC、GDB 或 GCC/GDB for Windows 这样的开放源码开发工具能提供与 Windows SDK 相似的功能性,不过,在当前,要移植 Windows 应用程序以使用这些工具还是一项非凡的任务。
然而,当我们考虑整个 SDLC 阶段时,就可以将 Eclipse 看作一种可以替代 visual studio 的有效的开放源码方案。Eclipse 所支持的可用于 Windows 中的 C/C++ 应用程序开发的插件越来越多,Eclipse CDT 很可能会变成 Windows 中的 C/C++ 开发的默认 IDE。