构建跨平台的自由桌面开发环境(C/C++)(一、软件介绍)
按:随着互联网的兴起,各种新兴跨越网络和异种平台的“企业”开发及运行环境大行其道,新生程序员对传统的桌面开发环境逐渐淡漠起来。但真正从事软件事业的人们终究会意识到所谓的企业应用只是这个世界上万千计算机应用中的一种,还有更多的各种传统应用仍然 在发挥着重大作用。在工业、通讯、智能终端以及传统桌面,乃至操作系统本身还有着巨大的需求,期待着软件的迅速更新和技术上的不断突破。而从事这些工作的相对完善的开发环境是必不可少的。本文试图帮助有需要的人们通过使用自由软件来构建通用跨平台的桌面开 发环境。
(一)软件介绍
Eclipse项目(1)是由IBM发起的一项开源的软件集成开发环境(IDE),最初是作为Java的开发平台延续IBM的VisualAge For Java而出现的。其早期贡献者主要来自IBM的加拿大研究中心OTI(Object Technology International),架构设计来自OTI的一个软件组件化试验平台(2),其自身也是使用Java开发的。随着其获得的巨大成功,IBM已经决心把它打造成通用的开发平台,同时力邀大量第三方厂商和组织的加盟,同这方面的垄断巨头形成对抗。
因为Eclipse的良好组件结构以及设计者的深谋远虑,从一开始Eclipse就不是仅仅限于Java开发环境而存在。JDT(Java Development Tools)是作为开发组件出现的,虽然相对处于优先的地位(相当于Visual Studio中的Visual C++),但很快CDT(C/C++ Development Tools)就出现了。早期的CDT相对于JDT而言相对比较单薄,同时由于语言特性上的差异和编译环境的差别,没有像JDT那样受到了普遍的欢迎。当然在这个方面的对手的强大也是一个重要的原因。但随着开发人员的不断努力,目前的CDT功能已经十分完善 ,具有了流行的IDE的各项基本特性,足以承担起大部分开发人员的需求。
因为C/C++不具有Java的某些特性:跨平台解释执行,因此和JDT不同,CDT不含有编译器,而仅仅作为IDE出现。因为Eclipse是开源软件,因此选择了GCC(GNU C/C++ Compile)(3)作为编译器,类似的使用GDB作为调试器等。GCC虽然早期是在Unix环境下开发的,但作为通用的标准C/C++编译没有什么阻止它用于Windows乃至其他平台。这些年随着开源软件影响力的扩大,先后出现了Windows平台移植(4),和一些基于GCC的Windows环境下集成开发环境(5)。
Cygwin(6)是Cygnus公司(后被Redhat收购)开发的windows下的仿真unix环境,被Redhat收购后,成为了开放项目。通过Cygwin,开发人员可以无缝的把unix/linux应用移植到Windows平台下,而无需任何源代码的修改(或者只需要很少)。实际上目前的Cygwin基本上已经涵盖了所有的通常linux环境下的大多数开源软件的本地版本,包括X-Windows这样的图形界面系统。因此大家可以轻松想象出,除了在一些底层驱动模块开发上,完全可以做到大部分桌面应用的跨平台开发和运行。
[注释:Mingw vs Cygwin]
Mingw号称最小的Win32下GNU开发环境,而Cygwin作为整个标准开源环境linux的Windows仿真,也同样包含了各种GNU开发工具。所不同的是,后者除了开发工具外,还提供了绝大部分的linux库的Windows版本,包括桌面仿 真,支持linux/unix设备文件的访问。也就是说完全可以和在linux环境下一样的开发Windows应用。当然这个并不是它的主要目的,这样做的好处,就是可以透明的在两个平台之间开发和移植。而Mingw的主要目的只是把Gnu工具用于Windows环境下的应用 开发,并不提供unix/linux本地一些库函数(这个说法不够标准,应该说提供posix标准要求的那些接口。linux其实是因为遵循这个标准,才显得和unix如此相像,虽然其也使用和参考了unix的许多设计)。这样导致的结果就是,在Mingw下无法跨平台开发和系统 结合紧密的一些应用。
开发桌面应用以及现今的许多具有GUI接口的应用,除了方便易用的IDE外,一个强大完备的界面接口类库是必不可少的。界面接口的繁琐是众所周知的,而且几乎无法有一个统一的标准。微软就是借助于其VC捆绑MFC而一举占领山头(虽然MFC是出名的臃肿, 繁复),Linux在桌面上的弱势也和这个大有关系。幸好,在众多自由软件开发人员的努力下,一个新颖完备,功能强大,简洁易用的图形界面接口库已经呈现在开发人员面前,这就是GTK+(Gimp ToolKit)(7)。GTK是伴随着重量级图形应用Gimp而被开发的,现在已经成为Gnome桌面的标准开发接口。其早期版本(1.x)并不被人们看好,特别是在Qt这样的商业级类库前面。但2.0版本的推出,名称添上+号表明这已经是全新的系统, 给linux桌面应用的拓展注入了强心剂。和QT不同,GTK/+本身是以C函数库接口的形式出现的,主要是为了兼顾各种应用开发的需要。但其设计核心完全采纳了最新的思想和架构,不下于现今流行的任何类库,为了方便C++使用者的习惯,同时开发了其C++版本GTKMM(8)(基本上是面向对象的薄层封装)。GTK MM因为采纳了C++的最新标准的特性,相比QT而言,没有任何语言扩展,同时也没有MFC那混乱的宏,更加适合初始开发人员的学习和使用。同大多数开源软件一样,GTK+/MM也被移植到Windows下面,实际上GTK+的设计已经考虑在不同的图形环境中通用的需求。
桌面应用开发环境需要的另外一个特性就是RAD(Rappid Application Development)(虽然VC不能算是RAD,但因为其总体上十分方便以及C++的优异的特性,仍然吸引了一批忠实用户,相比之下,Linux上的Delphi移植Kylix由于出现的时期因素和尴尬的地位而被渐渐淡忘),GTK+在开发的同时,根 据自身的需求,也开发出了相应的界面设计工具Glade,虽然不是十分傻瓜化,但因为其直接生成C/C++代码,使用上要灵活的多。另外Glade的设计模板也可以结合相应的函数库运行,甚至直接使用在其他语言环境中,给开发人员更多的选择。
(1)www.eclipse.org
(2)暂缺
(3)www.gnu.org
(4)www.mingw.org,是gun开发工具的win32移植版本,涵盖了基本的编译器,连接器,调试器以及函数库等,名称取意最小的windows下gnu开发环境。
(5)dev c++是使用gcc作为编译器的一个windows下面的c/c++集成编辑编译环境,适合初学者使用。
(6)www.cygwin.com,内容庞大,国内下载可选择韩国镜像。
(7)www.gtk.org,作为Gnome的子项目存在。
(8)www.gtkmm.org,是gtk+的官方c++版本,也可称为GTK--,自由软件开发者喜欢用--代替++表明更加简洁易用的意思。