苹果自动开机:GCC for Win32开发环境介绍 - 北斗星君的专栏

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 23:03:47

GCC for Win32开发环境介绍(1)


第一章 在视窗操作系统下的GCC

第一节 GCC家族概览


GCC是一个原本用于Unix-like系统下编程的编译器。不过,现在GCC也有了许多Win32下的移植版本。所以,也许对于许多Windows开发者来说,GCC还是一个比较陌生的东西。所以,我希望通过这章的叙述,让你——一个Windows开发者对GCC这一个优秀的编译器有一个大概的了解。


历史

GCCGNU公社的一个项目。是一个用于编程开发的自由编译器。最初,GCC只是一个C语言编译器,他是GNU C Compiler 的英文缩写。随着众多自由开发者的加入和GCC自身的发展,如今的GCC以经是一个包含众多语言的编译器了。其中包括 C,C++,Ada,Object CJava等。所以,GCC也由原来的GNU C Compiler变为GNU Compiler Collection。也就是 GNU编译器家族 的意思。当然,如今的GCC借助于他的特性,具有了交叉编译器的功能,即在一个平台下编译另一个平台的代码。

直到现在,GCC的历史仍然在继续,他的传奇仍然被人所传颂。


Windows下的GCC家族


起初,GCC是用于Unix,Unix-like系统的编译器。不过,现在Windows下也出现了GCC的稳定移植版。这要感谢Internet上众多程序员的共同努力。

如今,在Windows下比较流行的GCC移植版主要有三个。他们是 MinGW,CygwinDjgpp。虽然,Djgpp是应用于DOS系统的,考虑到windowsDOS的兼容,所以也将Djgpp纳入其中了。

总体来说,MinGWCygwinDjgpp各有特色,针对不同的应用场合,可以选择不同的移植版来满足需要。MinGW这个系列的移植,主要方向是让GCCWindows移植版能使用Win32API来编程。而Cygwin的目标是能让Unix-like下的程序代码在Windows下直接被编译。至于Djgpp,则是想让DOS下也能用上GCC所以,对于开发人员不同的需求。选择合适的移植版会让工作变得轻松而高效。


本书的GCC


我个人对GCC的移植版都非常喜欢。不论是MinGW还是Cygwin,亦或是Djgpp。在本书中,除了特殊说明以外,所述的内容适合所有这三种移植版。不过,考虑到现在在Windows下用的比较多的是MinGW系列。再加上MinGWCygwinDjgpp安装和使用更为简便。所以,建议读者学习时还是使用MinGW



第二节 入乡随俗的MinGW


简介

MinGWMinimalistic GNU for Windows 的缩写。她是一个建立在GCCbinutils 项目上的编译器系统。和其他GCC的移植版相比,她可以说是最接近Win32的一个了。因为,MinGW几乎支持所有的Win32API,这也是MinGW的特色之一。她所连接的程序,不需要任何第三方库就可以运行了。在某种程度上看,MinGW更像是VC的替代品。


获得与安装

MinGW可以从MinGW的官方网站 http://www.mingw.org 上获得。

如果,你要安装MinGW,那么你有两种安装方案。下面我来一一介绍。


安装方案一:

首先,你要从 http://www.mingw.org/download.shtml 上下载如下几个压缩包。考虑到文件的更新和文章的灵活性。我将只写出文件的主要部分,将省去版本好和更新日期。


gcc-core C语言编译器 gcc-c++ C++语言编译器 mingw-runtime MinGW的运行时库(这个必须安装)

win32api

win32API函数头文件和连接库

binutils

MinGW的汇编器和连接器等基础工具

gdb

MinGW中的调试工具 mingw32-make Make工具,用以更好的管理你的项目


然后,将上述文件逐一下载,然后全部解压缩到一个目录下就可以了,我这里假设你是移动到$(MINGW)这个目录下了。这样,你的MinGW就算安装成功了。

最后到DOS终端上,将当前目录转换成 $(MINGW)/bin 下。输入


C:\>gcc -v


看到一段gcc的版本信息,这就能说明,你的gcc已经可以正常工作了。


安装方案二:

你可以从 http://www.mingw.org/download.shtml 上下载 MinGW5.0.2.exe 这个程序。至少,在我写此文的时候,这个是最新版本。

下载以后运行安装,至于安装过程,我想我就不一一介绍了。对于Windows下的开发人员,我想这个应该不是什么问题了。在一切都选择好以后。这个程序就开始从Internet上下载所需要的压缩包。然后,逐一解开,安装。


总体来说,两种方法各有长处。不过,本人偏爱第一中方法。因为,控制度高,而且,更新也比较简单。自己心里也比较明了。


环境设置:


对于我们这些使用者来说,最好是能够简单方便的使用工具。所以,我们就需要设置环境,便于我们使用MinGW

对于设置,我们只需要在环境变量中的PATH 变量中,添加$(MINGW)/bin这个路径就可以了。


这样,你就可以在任何目录下使用MinGW了。



第三节 人在曹营心在汉的Cygwin


介绍


Cygwin,其实并不是一个GCC。她是让Windows拥有Unix-like环境的软件。所以,GCC自然也就会包含在里面。不过,对于开发者,Cygwin是一个开发环境。而对于用户来说Cygwin是一个运行环境。Cygwin唯一和MinGW最大的区别在于,使用Cygwin可以在Windows下调用Unix-like的系统函数。比如进程函数,等等。所以,虽然说,Cygwin是运行在Windows下的,但是她还是使用的是Unix-like系统的函数和思想。


获得与安装

Cygwin可以从Cygwin的官方网站获得安装程序 http://www.cygwin.com/

在网站上下载Cygwin的安装程序setup.exe。然后运行便可以了。关于前面的设置,我想不用多做介绍了。因为,对于这些我想Windows下的开发人员应该相当清楚了。

在到了选择安装的组件时,在Devel 选项下,将gcc-core,gcc-g++ 等前的skip 点击成你所需要的版本号。

然后在 Lib选项卡中,将glib2,glib2-devel,glib2-runtime前的skip点成版本号。

接下来,就点击next就可以了。在一段漫长的等待时间后,你的Cygwin开发环境就算安装好了。相对来说,Cygwin的安装和配置都比较简单。因为,Cygwin提供了一个比较健全的安装程序。


使用


在安装目录下,运行cygwin.bat就可以启动cygwin环境了。这是一个模拟Linux的环境,所以很多地方可能和Dos有比较大的差距。不过,你编译出的程序可以直接在其他没有安装Cygwin的机器上运行。还有,如果要切换到windows下的其他盘下,比如D盘。那么就可以使用


$cd /cygdrive/d/


对于Cygwin更多关于使用的内容,你可以到Linux社区去获得参考。


第四节 脚踏两只船的Djgpp

介绍


Djgpp,是一个在纯Dos下的GCC移植版本。她使用一些软件将纯Dos设置成32位的环境,并运行由她编译出来的程序。总体来说,Djgpp并不是一个Windows的移植版。不过,她确实可以在Windows下运行。对于一些特殊应用。Djgpp是唯一适合的。


获得与安装

Djgpp,可以从Djgpp的官方网站上下载 http://www.delorie.com/djgpp/

不过,这里Djgpp为用户做了更好多的安排。她为用户提供了一个定制安装的页面。http://www.delorie.com/djgpp/zip-picker.html您只需要在上面填写响应的内容,然后递交。她将会给你一份完整的安装方案。


使用


相对来说,Djgpp我并不是经常使用。所以,本文中在没有特殊说明情况下,不会使用Djgpp的。



文外音:

总体来说,这篇文章写的有些匆忙。所以可能有些地方有不足。所以,希望各位能够多多原谅批评和指教。下一章,我将介绍GCC for Win32IDE。同时,从这一章开始,我将向各位读者做一个小小的要求。那就是,希望你们能够将自己对这篇文章感到的不足告诉我,我将随时修改以发表的内容,以适合广大读者的要求。如果各位有什么想法或者意见,疑惑。希望您能到 http://blog.csdn.net/visioncat 上提出。



STUDIO软件开发组(SDT)
STUDIO Development Team
北斗星君
(黄庠魁)


评论

#   Mouthintree 发表于2006-05-13 21:12:00  IP: 220.166.240.* 请教2个问题:
(1)我下载了Mozilla Thunder Bird的源代码,要用什么环境才能看到源代码?因为我前面用了dot net 2003都没有看到源代码。
(2)请问哪里能找到Bayesian Filtering Algorithm(贝叶斯过滤算法)的具体内容?因为我在网上搜了很长一段时间都没有找到贝叶斯过滤算法核心的东西,我想你可能知道某些搜索引擎搜不到的讨论这个算法原理或者源代码的地方。

希望您能帮助我,谢谢!
#   Mouthintree 发表于2006-05-13 21:14:00  IP: 220.166.240.* 哦~忘了点东西,我的EMAIL是:ykmdyx2001@163.com

希望您能把解答发送到我的邮箱里,麻烦您了,谢谢!!!



Mouthintree
#   Lee 发表于2006-05-19 09:17:00  IP: 10.22.61.* 祝贺新版开篇!

这是我能搜索到的唯一的中文GCC开发环境的介绍。期待更多的后续作品!
#   Lee 发表于2006-05-19 09:25:00  IP: 10.22.61.* 看完之后有个小问题:Djgpp虽然不是你介绍的重点,但是既然已经提到了,还指出它适用于某些特殊的场合,能不能略举点例子呢?我对这个问题比较关系就是因为我们经常需要编写刺激呈现程序来做心理物理实验,为了达到足够的时间记录精度,也许需要Dos下程序运行时的那种系统独占性。
#   北斗星君 发表于2006-05-19 23:58:00  IP: 58.34.94.* 谢谢楼上的意见,我将在一周内修改以上文章。

Djgpp总体来说,并不完全是一个纯16位DOS编译器。同时也没有宣传中的那么好。

我接触Djgpp只是当年是要用GCC研究一些操作系统知识。感觉,Djgpp对于需要底层操作的人来说是个不错的选择。

最后,万分感谢楼上的意见。
同时,也感谢Lee的赞扬。呵呵。
#   北斗星君 发表于2006-05-20 00:01:00  IP: 58.34.94.* 如果你急需有关GCC的内容。本站上旧版的文章也可以作为参考查看的。希望能够对你有用。
#   北斗星君 发表于2006-05-23 21:46:00  IP: 58.34.90.* 的确,是这样的。
因为,MinGW只是GCC for win32的移植版中的一个而已。
而,Dev-Cpp也只是一个IDE,严格来说,并不是工具支持这个IDE,只是工具支持他所用的编译器而已。

而本系列文章要比原来的范围更广,所以不能总围绕在这个小范围中讲了。

所以,原来那个系列的文章是这个系列文章的一个子集。
#   Shellex 发表于2006-05-23 17:31:00  IP: 219.159.98.* 我发现,没有了Dev-Cpp或者Mingw这样的字眼了yeah..
#   vvoody 发表于2006-06-26 13:49:00  IP: 61.172.104.* 期待续篇
#   vvoody 发表于2006-07-03 21:57:00  IP: 61.172.105.* quake是Djgpp编译的?
#   北斗星君 发表于2006-07-04 10:28:00  IP: 58.34.89.* quake是游戏引擎吧。我对游戏不太了解的。
如果,你说是在DOS下的quake(我不知道有没有,因为没接触过游戏),那么也许是拿Djgpp写的。

因为,我从几个方面得出以上结论。因为我看到quake有很多32位的版本,那么quake的公司应该不会为DOS专门开发一套。所以,我想可能是Djgpp编译的。

希望我的回答能让你满意。谢谢。
#   vanish 发表于2006-07-05 17:37:00  IP: 61.150.43.* 楼主是否有cygwin开发的资料啊!
如果有的话能不能发给我,我的邮箱是:vanish2@126.com
在此先谢过了:)
#   北斗星君 发表于2006-07-05 18:50:00  IP: 58.34.95.* 非常不好意思,Cygwin其实是一个模拟Linux环境。
所以,Cygwin的开发资料并不存在。

而且,好像Cygwin的中文资料也很少。不过,你可以通过看Linux的资料来获得你所要的功能。

基本上,Linux环境下的资料,对Cygwin还能算适合的。

谢谢,希望我的回答能让你满意。
Good Luck
#   拉拉是头猪 发表于2006-07-06 16:14:00  IP: 210.21.222.* 非常感谢你的文章。
刚刚参照你的文章安装完,先说声谢谢了。
不过要提点意见,呵呵:
比如:
win32api win32的API函数头文件和连接库
这里如果写成 w32api-3.3.tar.gz 或许会更好一些。
我刚开始安装的时候一看那么多目录那么多文件,
要下哪一个啊?就开始晕了,如果能写清楚一点也许会更好。

#   北斗星君 发表于2006-07-06 18:52:00  IP: 58.34.82.* 你好,拉拉是头猪。

觉得你的名字很好玩,因为我以前高中时有个英语老师的外号就是这个。

其实,开始我是准备说,下w32api-3.3.tar.gz这个文件。可是,我怕如果以后更新的话,可能会造成别人的不理解。所以,这里就省去了这个版本好。


对于给您造成的不便,感到抱歉。

星君上

#   SmartAI 发表于2007-07-18 15:17:51  IP: 220.249.88.* Good 受益非浅 谢了先 学习中……
#   北斗星君 发表于2007-07-20 10:34:10  IP: 58.34.253.* SmartAI 过奖过奖。
#   bitsun 发表于2007-07-23 21:37:28  IP: 212.201.75.* 很喜欢,轻松的笔调。我一般在windows下写程序,但其实基本不用到mfc或者windows api,所以一直想转移到gcc,mingw正好给我一个先在windows下实验的机会,不错。mingw的官网也没有如此入门级别的介绍,
#   北斗星君 发表于2007-07-24 00:38:31  IP: 61.170.220.* bitsun 真是太过奖了。
不过我这并不只是介绍MinGW。而是介绍一个以GCC的Windows移植版为核心的,可以以低廉的代价合法获得的开发环境。

当然,侧重MinGW只是一个巧合而已。因为,在Windows下的GCC中,比较知名的还是MinGW。相对Cygwin来说,MinGW更小巧也更类似于Win32程序员所使用的VC编译系统。

最后感谢您以及各位的支持。我会更加努力的继续写出这系列的文章的。你们的支持是我最大的动力。

星君上
#   独霸 发表于2007-07-30 11:41:42  IP: 61.178.82.* 星君,我想按第一种方案安装MinGw,可是在Sourceforge上却找不到Gdb!
#   Zack 发表于2007-07-30 12:09:33  IP: 124.160.120.* 点击MSYS下的
View older releases in the Snapshot package »
链接就可以找到了
#   北斗星君 发表于2007-07-30 17:32:46  IP: 61.170.223.* 呵呵,感谢楼上 Zack 的回答。
的确,因为GDB貌似MinGW很久没更新了。所以SF将其列为老的文件了。

希望我来的不算晚。
#   maersi111 发表于2007-08-05 15:50:11  IP: 159.226.115.* 一直想要这样的关于Gcc在Windows下使用的文章,看来是我搜索得不仔细,如此佳作现在才看到!读了受益良多。向星君致意!

噢,想到一个问题,请问是不是安装了Cygwin(我是自己选组件安装的,装出来4、5百兆呢,还只是选了一部分组件,印象中MinGW的内容是装了的),就相当于拥有了MinGW的所有功能啊?MinGW完全包含在Cygwin系统中,这句话有错吗?

谢谢!

#   北斗星君 发表于2007-08-05 22:32:18  IP: 58.34.94.* 是的,MinGW 作为 Cygwin 的 GCC 依赖包被包含了。

但是 Cygwin 是一个命令环境的模拟,MinGW 是一个编译环境。

最后谢谢楼上的赞扬。
#   maersi111 发表于2007-08-07 12:12:31  IP: 159.226.115.* 星君的解释真是一语中的,讲的很清楚啊,
佩服佩服!

上文回顾:

在上文中,我们了解的windows下的GCC编译器。这一章我们将来看IDE的介绍了。在此,我还要为各位表示抱歉,因为那么久才写出这篇文章。


GCC for Win32 开发环境介绍(2)


第二章 GCC的外衣——IDE环境


第一节 IDE for GCC概览


IDE,即Integrated development environment,也就是综合开发环境。对于习惯使用VCwindows程序员来说,在windows下,GCCIDE也许就比较陌生了。所以,想通过这一章简单介绍一下GCC所使用IDE

GCCIDE是什么?

IDE,也就是 综合开发环境 。她是为了便于程序员开发,管理项目的软件。对于C/C++来说,她主要包括四个部分。代码编辑器,编译连接器,调试器和工具库。而GCC本身就包含了编译连接器,调试器和工具库。所以,严格的说,GCCIDE主要功能就是一个代码编辑器,是用于编写代码的软件。

所以,从上面我们可以看到一个问题,那就是支持工具库的不是IDE,而是编译器。如果你使用不同的IDE开发项目,只要你使用的编译器是相同的,那么她就能支持相同的工具库。

Windows下的为GCC设计的IDE有那些?

许多GCCIDE,毕竟不是商业化制作的,因此很多地方都有不足的地方。下面是我个人认为不错的几个IDE

Dev-C++,这个IDE可谓是专门为GCC所设计的IDEVisual-MinGW,一个模仿VC6.0界面的IDE。最后是最近最火的Code::Blocks,由于也是最近接触,所以也不是太了解,不过,给人的第一印象是,特别像VC.Net的界面。

总体来说,各个IDE都有其自身的特点。对于初学者,Dev-C++比较不错,因为各种工具库基本都有为Dev-C++设计的安装包。对于从VC转形到GCC的人来说,Visual-MinGW是一个不错的选择,因为据我所知,大家熟悉和喜爱的还是VC6.0居多,因此模仿VCVisual-MinGW是一个不错的选择。对于打算用GCC开发项目的人来说,Code::Blocks的确会成为你的最爱,因为她的项目管理实在是太优秀了。其实,每个人都会从中找到适合自己的IDE

本书的IDE

本书使用哪种IDE呢?其实,本书不是专门为哪种IDE所写的。因此,本书所写的都是针对GCC本身所写的。因此,本书中的IDE。其实就是windows下最不起眼的notepad。不过,为了书写便捷,我通常使用Emacs或者Notepad++来书写代码。Emacs是一个Unix环境下优秀的编辑软件,Notepad++是一个notepad增强版,个人感觉比较适合开发程序。本书会在每个例子程序后附带一个Makefile文件,通过这个文件各位就能够非常直接的了解到环境的配置方式,然后根据不同的IDE为你的程序添加不同的参数。


第二节 最专一的Dev-C++


简介

Dev-C++,全称Bloodshed Dev-C++,是由Bloodshed公司开发的一款C/C++IDE。她所默认的编译器为MinGW,但是她能够支持Cygwin等其他任何GCC的移植版以及GCC本身。她是使用Delphi开发的,因此有些C/C++开发者觉得她的血统不纯。但是我个人认为,只要适合的,我们又何必在意她用什么开发呢?

获得与安装

Dev-C++,可以从她的官方网站 http://www.bloodshed.net 上获得。在官方网站的下载页上,你将会看到三个安装程序。下面我一一解释一下。

Dev-C++ with Mingw/GCC 这个是包含MinGW的安装包。安装这个包以后,你将拥有完整的一个IDE开发环境,自然包括编译器等。

Dev-C++ executable only 这个是只有IDE的安装程序,其中不包括任何编译器。所有,如果你没有安装GCC编译器的话,安装这个包以后你将会出现无法编译项目的问题。

Dev-C++ source code 这个是源代码包,当然其中只有Dev-C++的代码,没有任何GCC的代码。

通常偷懒的人选择 Dev-C++ with MinGW/GCC 这个包,这个也是我建议初学者安装的包。如果,你在上一章以后,已经安装了某个GCCwindows移植版,那么你可以选择Dev-C++ executable only这个包。如果你想研究一下Dev-C++的代码,并且对Delphi有所了解,那么Dev-C++ source code是你唯一的选择。

下面我对Dev-C++ executable only的安装方式进行说明。而Dev-C++ with MinGW/GCC的安装和她差不多,只是可以省去后面配置编译器的问题。

安装

首先,从官方网站下载Dev-C++。运行安装程序以后,您将看到如下的提示。

这个是让你选择安装时候所使用的语言这里,我们只能选择English,因为没有中文安装界面。

这个是许可证界面,选择 I Agree。感觉现在大家用盗版用多了,对于许可证都不关心了,可是我想作为一名开发者,应该对许可证的内容重视一下,毕竟你的软件也是要被人使用的。

这个是安装选项界面。其中,你可以选择你所要安装的内容和安装的一些选项,比如是否关联文件等。如果你下载的是 Dev-C++ executable only ,那么你将无法使用Mingw compiler system(binaries,headers and libraries) 这个选项,因为这个安装文件中没有包含这个。

这个界面是让你选择安装路径。你可以在这里选择你安装Dev-C++的路径。我这里假设你安装在$(DEV)下。

这个界面是询问你是否为windows上的所有用户安装Dev-C++。这里,我选择 否。如果你想让本地机上,每个用户都可以使用Dev-C++,那么你可以选择 是。

在安装程序结束后,默认会运行Dev-C++。你在首次运行时,会看到如下界面。

这个是选择你Dev-C++所使用的语言,界面图标和窗口风格。如图上选择,我们使用的语言是中文,使用New Look图标,并使用XP风格的窗口。

这个是询问你是否要Dev-C++提供函数补全功能,她将从头文件中读取函数头,然后为你补全。但是要消耗一定的CPU时间。如果,你的机器还可以的话,并且需要此功能那么你可以尝试一下。

至此,我们的Dev-C++算是安装成功了。如果,下载的是Dev-C++ with MinGW/GCC,那么后面的内容你可以不关心了。因为,你的IDE环境已经全都配好了。如果不是,那么您还需要自己安装编译器。

配置编译器

按照我第一章所介绍的,安装好某一个GCC移植版编译器,可以是MinGW,也可以是Cygwin。假设,您安装的目录为$(GCC),那么请将如下路径添加到系统变量 PATH 后。

$(GCC)\bin;

这样,你的Dev-C++就拥有了编译器了。当然,你也可以从Dev-C++的网站上下载MinGW全套的Dev包,然后用Dev-C++带的包管理程序安装MinGW


添加新的工程类型

在平时,我们通常会建立自己的工程文件。但是,如果每次都要自己设置环境变量,编译器参数未免也太麻烦了。本处就要介绍,如何将自己定义的工程类型,添加到Dev-C++的新建工程选项里。就如下图所示,

Dev-C++的项目模板文件,保存在安装目录的Templates目录下。文件以template后缀结尾,你可以用记事本打开。下面我们一起来建立一个自己的项目。

templates目录下新建一个名为MyProject.template的文本文档。内容如下:

[Template]

ver=1

Name=MyProject

Icon=0

Description=一个小小的测试

Catagory=HOME


[Unit0]

CName=main.c

C=MyProjectC.txt


[Unit1]

CName=myProject.h

C=MyProjectH.txt


[Project]

UnitCount=2

Type=1

IsCpp=0

Compiler=-DPASSWORD

Linker=-O2

Name=My Project

ProjectIon=0

[Template]

标签后的内容是对项目的介绍。

Ver

变量是Template文件的版本,这边默认是1不要更改。

Name

变量是项目的名称

Icon

变量是项目图标的路径,如果没有那么就写0

Description

变量是对这个模板的介绍。

Category

变量是这个项目属于哪种项目,这里我们自己建立了一个名为Home的类型。

[Unitx]

其中x为从0开始的任何整数,是定义项目中所包含的文件。

CName

变量是说明这个文件在项目保存时默认的文件名。(C语言时使用)

C

变量是Cname文件的源文件。(C语言时使用)

CppName

变量同Cname变量,只是在C++语言时使用。

Cpp

变量同C变量,是在C++语言时使用的。

[Project]

标签是对工程的总体介绍

UnitCount

变量是说明整个项目有多少文件,从1开始。

Type

变量是告诉IDE这个项目采用何种编译方式。0windows窗口程序,1为控制台程序,2为静态连接库,3为动态连接库。

IsCpp

变量是说当前项目是否只能使用C++语言,0表示不是,1表示是。

Compiler

变量是编译器参数

Linker

变量是连接器参数

Name

变量是项目的名称

ProjectIcon

变量是项目编译以后,主程序的图标文件。

下面给出了MyProjectC.txtMyProjectH.txt的内容。

//MyProjectC.txt

#include

#include

#include "myProject.h"

int main(int argc,char *argv[]){

printf("%s\n",S);

return(0);

}



//MyProjectH.txt

#ifdef PASSWORD

#define S "Hello World"

#else

#define S "NO PASSWORD"

#endif

重新启动Dev-C++,在你的项目中就存在了我们的项目。

最后的内容

相对来说Dev-C++的功能还是比较简单的。而且,界面也是属于中文的。所以,慢慢摸索你一定可以熟悉这个环境的。

文外音:

总的来说,Dev-C++是一个不错的IDE。很适合对GCC不是太了解的人使用。当然,这里我还是要表示抱歉,因为最近要忙于考试,所以迟迟没有推出这篇文章。现在经历了漫长的考试时间,我在放假的刚开始,就匆匆写出了一些,赶紧贴出来。这里我还是希望各位能提出一件和疑问。如果各位有什么想法或者意见,疑惑。希望您能到 http://blog.csdn.net/visioncat 上提出。谢谢。


STUDIO软件开发组(SDT)

STUDIO Development Team

北斗星君(黄庠魁)



评论

#   BlackHan 发表于2006-06-30 17:49:00  IP: 218.242.140.* 拜托, 对于野心勃勃的ecllips 的CDT(for C/C++)插件楼主竟然没有提到,我认为这才是今后具有统治地位的IDE

当然C++BuilderX也凑合能用。
#   北斗星君 发表于2006-06-30 19:18:00  IP: 58.34.86.* BlackHan说的是。
可是,Eclipse主要还是一个Java的开发环境,这点是勿庸置疑的。

其次,对于C/C++开发者来说,一个Delphi开发的界面都要被人非议,更何况一个解释性的Java呢?

再者说,Eclipse的体积有些过于庞大了。我所推荐的是小巧而健壮的东西。不是臃肿的。虽然Eclipse确实很优秀。但是,不同的开发者自然也有偏爱的开放环境,不能将自己的意志强加于人。就好像,有些人喜欢VC有些人喜欢C++Builder一样。

最后,Eclipse自然是一个优秀的开发环境(SDK)。但是,我想如果优秀的话,自然也不需要我这个小小的菜鸟来介绍吧。呵呵,我只能介绍一些普通,或者说简陋的IDE不是么?


不过,谢谢你的建议,我非常欢迎您这样的人。大家要踊跃发言。
#   vvoody 发表于2006-07-03 14:23:00  IP: 61.172.104.* 现在有一款叫 C-free的C/C++IDE也不错的,小巧。可以向初学者推荐的。
我不是做广告:)
#   Newer 发表于2006-07-03 14:59:00  IP: 220.248.3.* 问个问题啊。如何将Dev-cpp提示菜单打开
就是如果你输入std::然后出现std下所有的关键字菜单。

#   北斗星君 发表于2006-07-04 10:16:00  IP: 58.34.89.* 由于,提示功能必须在一开始对include文件进行扫描。
你可是尝试删除

X:\Documents and Settings\(Your User Name)\Application Data\Dev-Cpp

上面这个目录来让Dev-C++认为你是第一次运行她,然后按照我教程里的方式进行设置。

希望能对你有帮助,Good Luck。
#   Newer 发表于2006-07-04 11:51:00  IP: 210.22.114.* 按照你的方式设置了,但是提示菜单显示不完全。就是显示的不是所有的成员函数或者成员变量

比如string st,接着输入st. 这时候跳出提示菜单,里面只有几个成员变量,没有出现成员函数。另外Dev-Cpp编译出错后的错误信息很难看懂。个人以为VC的编译出错信息更容易看懂。还有,什么时候讲解一下如何调试程序,单步跟踪之类的。Dev-Cpp的单步跟踪我至今没有弄会。只能在命令行下用gdb。

#   北斗星君 发表于2006-07-04 10:23:00  IP: 58.34.89.* vvoody您好,
C-Free我的确也知道,我可以同意你的观点,在当时收集资料的时候就看到了。
可是……
C-Free是共享软件。所以,我不能以相对于自由软件而言,廉价的方式得到完整使用C-Free的合法授权。所以,我自然也不能了解她。

其次,我的文章是非盈利性的,对一个共享软件做介绍,是否会引发争议?所以,出于以上种种原因,我没有介绍C-Free。对不起。
#   vvoody 发表于2006-07-04 15:59:00  IP: 61.172.105.* 哦,了解了
#   北斗星君 发表于2006-07-05 07:40:00  IP: 58.34.95.* Newer你好,
对于你的问题,我只想说一下我个人的看法。
毕竟对于代码提示的功能 Dev-C++ 也只是刚加入进去,有一点缺陷是很正常的事情。所以,我想你是否可以耐心等待一下,说不定下一个版本会好些的。

另外,你说错误信息看不懂。我觉得你是否认真去看了?我开始学编程的时候,就用的这个。什么都不懂,没人制导,没有资料,可我还是看懂他的错误信息。我想这不是Dev-C++或者MinGW的问题,那是你个人的问题,不是么?VC自然好,可是你不能让GCC弄的和VC一摸一样不是么?

关于调试,其实我承认Dev-C++的调试功能确实很不好。所以,如果我调试的话,我还是习惯用命令行的。

希望我这样回答你能够接受,谢谢。

星君上
#   Newer 发表于2006-07-07 10:53:00  IP: 210.22.101.* 唉,用IDE其实就是为了有代码提示,和方便的调试。如果做不到的,我还是回到命令行下用vi ,gcc,gdb。
#   北斗星君 发表于2006-07-07 16:09:00  IP: 58.34.87.* 我个人觉得,如果要成为编程之人。就不能在一开始就过分依赖IDE。代码提示虽然好,可是也有他得弊端。方便调试自然好,可是毕竟有缺陷。

IDE是为了方便我们的工作,而不是让我们成为他的奴隶。VC6.0这个IDE很多人都觉得很好,可是,他也有他的缺陷。常会发生莫名其妙的代码错误,我在学校试验时就发生N次。

所以,我个人认为。从最原始的方式开始,一步步的了解。我们当然不要造轮子,可是至少我们要知道怎么去造轮子,并造一个轮子看看。不是么?
#   Newer 发表于2006-07-07 18:16:00  IP: 210.22.114.* 现在我再次回到命令行下了用vi,gcc,gdb了。本来想用Dev-cpp方便编程的,无奈它做的还不够好,所以又回到命令行下了。呵呵。



#   Newer 发表于2006-07-07 18:17:00  IP: 210.22.114.* 依旧期待GCC在Win下有好的IDE
#   新手 发表于2006-07-11 17:28:00  IP: 211.94.138.* 楼主及各位,我是个初学者,问一下你说到的"添加到系统变量 PATH 后",到底是添加到那里,怎么添加??谢谢!
#   新手 发表于2006-07-11 17:30:00  IP: 211.94.138.* 楼主及各位,我是个初学者,问一下你说到的"添加到系统变量 PATH 后",到底是添加到那里,怎么添加??谢谢!
#   北斗星君 发表于2006-07-12 11:43:00  IP: 61.170.221.* 不好意思,由于这里的留言管理问题,造成我这边没能及时看到你的留言。

你如果使用的是win2000及以上操作系统。

那么,在我的电脑上右键,然后选择属性,在高级选项卡中找到环境变量这个按钮,点击。就可以修改环境变量了。

你也可以在 cmd 中输入
set PATH=%PATH%;...;来添加。其中...为你的路径。
#   vvoody 发表于2006-07-12 13:14:00  IP: 61.172.104.* 你说“从最原始的方式开始,一步步的了解。”,那么一开始在windows下如何进行?命令行是怎么回事?
谢谢
#   北斗星君 发表于2006-07-12 18:06:00  IP: 61.170.221.* 所谓从最原始的方式开始,所说的是从工具本身的功能开始。了解核心的工具。

而IDE的核心是编译器,这点是勿庸置疑的。因为,IDE的环境设置和工具,功能都是围绕他的编译器来说的。

一开始怎么在Windows下进行。那要看你自己了,我觉得只要自己觉得顺手,怎么样都可以的。

命令行的问题,我也不太清楚。因为,我也不能用一个比较恰当的语言来形容Windows下的DOS。说是DOS也不是,说是Windows也不是windows。所以,只能按照Linux的称呼,叫终端。其实就是附件里的命令提示符。
#   vvoody 发表于2006-07-12 22:48:00  IP: 61.172.105.* 就是自己要用熟、用顺手一款IDE,对吗?
那么在有IDE的情况在,我还有必要到命令行中,用gcc source.c的方式进行编译吗?
thanks
#   菜鸟 发表于2006-07-13 00:17:00  IP: 222.137.77.* 楼主我是个出学者什么也不懂,C++工具下载了怎么安装不了,我这里是XP系统
#   北斗星君 发表于2006-07-13 12:51:00  IP: 58.34.87.* vvoody:
你的理解也正确,的确,每个人有每个人的特点,也许我习惯的不一定你习惯。你习惯的,不一定别人习惯。不是么?如果,你想放弃这一部分我也没有意见。并希望你能成为一名高手,我忠心的祝福你。

菜鸟:
你好。你如果是新入门的,那么你可以下载Dev-C++的完整安装程序。这样你就可以获得一个开发环境了。另外,不要叫自己菜鸟。因为,成为高手是一个过程,没有人生来就什么都懂。Good Luck
#   abc 发表于2006-08-11 16:32:00  IP: 222.185.206.* 请问,devcpp有缩进功能吗?

就是MinGW Developer Studio 和 eclipse

都有的那种把函数缩起来的功能。

还有别的IDE有这种功能吗?
#   abc 发表于2006-08-11 20:28:00  IP: 222.185.204.* 更正下,应该是哪些IDE有代码折叠功能,

我就知道MinGW Developer Studio 和 eclipse

UltraEdit有吗?
#   北斗星君 发表于2006-08-12 20:54:00  IP: 58.34.95.* Dev-C++应该没有。
UltraEdit我不能获得合法的完全使用许可,所以我不知道。

NotePad++不错,可以尝试。
#   ShellEx 发表于2006-08-23 15:15:00  IP: 219.159.95.* 我现在到觉得代码折叠用处不大.
UE32有代码折叠功能,不过有BUG
DevC++没有.
NotePad++有.但是没法方便的配置
PSPad.我在用这个产品,没有折叠,有类视图,有自动补全,而且方便配置.不错.但是对标准C++的语法支持不够.特别是它的类视图...分析C++代码时可能显示得乱七八糟...郁闷.如果不用来写C++没问题.它支持很多语言
VIM.我在用这个产品,目前没有折叠,有类视图(插件),有自动补全,而且方便配置.而且比较轻巧.不错....很不错...
以上软件,只有UE32是非Free的.UE32还有个哥们,叫Ultra Studio.这个东西...很难说它有什么大用.比谁都比不过...
#   北斗星君 发表于2006-08-23 19:15:00  IP: 58.34.98.* 感谢楼上的ShellEx的解释。

的确,就如ShellEx所说的,(其实有些是从我这里批发过去的^_^)

这些就是有关代码折叠这方面的资料了。不过,我这里还要补充一下,
还有一个Emacs。我在Windows和Unix都用这个编辑器。

虽然不能说有什么好,但是可以说是最强大的编辑器了。
(ShellEx别生气,我知道你用vi/vim的)
各人有各人的习惯,有些喜欢vi有些喜欢Emacs,提问者可以根据自己的喜好选择。


星君上
#   ShellEx 发表于2006-08-23 22:56:00  IP: 219.159.95.* 我故意不说Emacs的...给你机会发扬一下..呵呵呵

#   北斗星君 发表于2006-08-24 16:20:00  IP: 58.34.88.* 谢谢了啊。

Emacs我的最爱。
#   sarrow 发表于2006-09-09 12:22:00  IP: 58.66.106.* 星君同志,一点截图的建议:

截图的时候,按:

+

就会把当前获得焦点的窗口的图象截取下来,而不会在边框出留下难看的背景条纹 -- 你这样的图,害得我得手工修改。

痛苦ing!
#   sarrow 发表于2006-09-09 12:26:00  IP: 58.66.106.* 对不起,我记错了是:

+
#   北斗星君 发表于2006-09-10 09:16:00  IP: 58.34.92.* 我知道了,谢谢你的意见。

我以后做图的时候会注意的的。

给您带来的不便,我表示深深的抱歉。

对不起。
#   白痴一个 发表于2007-04-02 18:13:05  IP: 222.88.236.* 嘿嘿,偶也在用Emacs~~
正在强迫自己脱离VC这个IDE,痛苦ing
mingw,用了好久了,一直寻找好用的IDE,你说的Virtual-Mingw,Code::Block,devcpp,都用过,都感觉不爽。。。
后来觉得用这些IDE,实际上,和Emacs,对于偶来说,都差不多,干脆转入Emacs用,嘿嘿。。。

对了,你可以介绍些好的插件。。。。。。
偶现在用的是NTEmacs23
#   北斗星君 发表于2007-04-02 21:50:22  IP: 58.34.88.* 其实,如果在Win32下的话。Notepad++ 这个还是不错的。

有机会的话,楼上的可以去尝试一下。
我现在在win32下,就比较喜欢用那个。

嘿嘿,好东西大家分享。
#   孤行的浪子 发表于2007-08-31 22:49:39  IP: 218.7.32.* 我用的是dev-c++4.9.9.0版的 但是安装界面与上面所展示的一模一样 打开时挺快的 今天看了上面的介绍 下了一个4.9.9.2版的
结果安装时都就只出现了前五个图 第一次启动也没有设置画面 而且打开时速度很慢 后来才发现只要打开这个软件它就在左边窗口中把所有的类给列出来了 4.9.9.0版的就只列出打开的文件中的类
请问是不是我下载的有问题啊?
#   北斗星君 发表于2007-09-03 21:56:10  IP: 58.34.252.* 应该不是,可能是你的设置问题。

没有配置文件可能是因为 4.9.9.2 有所改进。活着你曾经安装过旧版的dev。

上文回顾:

在上一篇文章中,我们了解的IDEDev-C++。这篇文章中,我将带领各位继续我们的IDE之旅。继续介绍Visual-MinGWCode::Blocks。希望这些IDE能给各位在工作和学习中带来便利。



GCC for Win32 开发环境介绍(3)


(第二章 GCC的外衣——IDE环境)


第三节 最脸熟的Visual-MinGW



简介


Visual-MinGW 是一个专门为MinGW所设计的IDE。如果,你曾经用过VC++ 6.0这个IDE,你的第一感觉就是,Visual-MinGWVC++ 6.0非常相似。所以,对于曾经用惯VC的朋友们来说,Visual-MinGW不失是一个好的选择。然而,Visual-MinGW的开发与更新似乎并不积极。因此,还有不足的地方。Visual-MinGW的理念是提供一个高效的,快速的创建代码的IDE


获得与安装


Visual-MinGW可以从他的官方网站http://visual-mingw.sourceforge.net获得。在官方网站上,您将看到有DevelopmentVisual-MinGW两个下载选项。这里,我只以Visaul-MinGW的下载项为例。Visual-MinGW是一个不包含MinGW编译器的安装程序。


安装


首先,从官方网站下载前面所说的安装程序,然后运行。基本的安装步骤和Dev-C++类似。由于没有什么选项。我们这里就不一一举例了。

接着,我们运行Visual-MinGW。在第一次运行时,我们将看到如下对话框。

这是询问你,是否关联相关文件。也就是让Visual-MinGW成为默认的文件编辑器。

这个对话框是告诉你,需要将MinGW的目录设置进你的Compiler目录。

如果,你安装了MinGW。那么你在这里就可以设置了。我假设,你的MinGW安装在$(MinGW)目录下。那么在Compiler Path前打勾,并将$(MinGW)添加上去。

如此,你的Visual-MinGW就算设置好了。如果,你没有安装MinGW,那么你可以查看第一章的内容。这里,我就不多做介绍了。


配置


如果,你需要改变编译器所在的目录。可以使用如下方法调用设置界面。

在菜单栏选择 File -> Preferences.. -> Environment 这样,你就开启了设置界面。这里的设置,和第一次运行的设置一样。


使用


其实,Visual-MinGW的使用方式和VC非常类似。基本熟悉VC的朋友。一定对Visual-MinGW不会陌生的。所以,在这里我就不详细介绍了。不过,可惜的是,Visual-MinGW似乎不能添加自己的项目类型。所以,这也给我们带来了不少不便。





第四节 最新颖的Code::Blocks



简介


Code::Blocks不只是GCC的一个IDE,也可以支持其他的编译器,比如 MS-VC,Borland C++等等。所以,总体来说Code::Blocks并不是某个编译器的特属IDECode::Blocks的界面设计很像VC.net的界面。从效果上看的确不错。而且,这个IDE支持插件功能,你可以从他的官方网站上获得这个IDE的插件和相关的帮助。


获得与安装


Code::Blocks你可以从他的官方网站 http://www.codeblocks.org 获得。在官方网站上,有两种版本下载,一种是带编译器的,一种是不带的,我们可以从文件的体积来分辨这些。这里,我下载的是不带编译器的。当然,带编译器的安装方式也类似。


安装


在网上下载Code::Blocks后,双击运行安装。

上面是安装的欢迎界面

这个是Code::Block的许可证界面。这里,软件用了GPL,这就说明你可以免费使用和传播。

这个是询问你安装的路径,你可以选择自己喜欢的路径。

这个是询问你安装的模式,因为软件也不大,所以如果你的硬盘空间有空余的话,就选择完全模式吧。

这个是安装前的确认,如果没有什么问题的话,他将开始将Code::Block安装到你的机器上了。

在一系列的安装后,你将看到如上的界面。提醒你已经安装好Code::Block了。Launch Code::Block意思是马上运行Code::Block



配置


在第一次运行Code::Block时,她会询问你所使用的编译器种类。如果不是有特殊要求的话,我这里选择GNU GCC Compiler。如果你一开始选错了也没有关系。

由于,我们安装的是没有编译器的版本。所以,我们这里必须安装编译器,具体的安装方式,可以参照前面的文章。这里,建议安装MinGW。现在我假设你的编译器安装在了,$(MINGW)目录下。

运行Code::Block,在菜单中选择 Build -> Compiler Options。调出编译器配置框。

如图所示,这个就是编译器选项,我们这里使用的是GCC所以,在最开始选择。GNU GCC Compiler。说明你选择使用的是GCC


然后选择Programs选项卡,设置我们MinGW的路径。

Compiler‘s installation directory中添加你MinGW的路径,按照上面的定义他应该是$(MINGW)。注意别把bin目录包含进去。如果你只安装了C语言编译器,并且你只使用C语言编译器。请将Linker for dynamic libs中的mingw32-g++.exe改为mingw32-gcc.exe


至此,我们已经顺利完成Code::Block的安装与配置了。如果,你选择的是带编译器的版本,那么你可以忽略配置部分。


使用


总体来说,Code::Block的使用还是比较显而易见的。对于有一些编程经验的人,使用Code::Block并不是一件非常困难的事情。当然,Code::Block可以建立自己的项目模板。具体的做法和Dev-C++类似。您可以查看$(CodeBlocks)/share/CodeBlocks/templates目录中的文件。


最后的内容:


总体来说,这次介绍的两个IDE总体来说还是不错的。不过,笔者使用最多的还是Dev-C++。对于Visual-MinGWCode::Blocks我了解并不多。前者是因为并不太喜欢,后者是由于刚出来。不过,还是希望我写的内容对各位有用。当然,我个人的喜好不会影响各位的使用。现在笔者没有使用其中任何一款IDE,笔者现在使用的IDE是我自己架设的,在Windows下我使用的是notepad作为我编写代码的工具,使用Makefile管理项目。所以,各位可以放心的选择各自喜好的IDE。不用担心会不被支持,或者被厌弃。至此,关于IDE的介绍将就到这里结束了。以后我将主要针对函数库本身做详细的介绍,并提供教程。


文外音:


首先,对各位读者表示抱歉。因为原本我准备趁着这次暑假多写一点东西的。可是,并没有预期的那么好。原本这篇文章应该在上个月写出来的。可是,上个月为了练习编程技巧,写了个Sudoku Puzzle,因此没能有时间写文章了。如果各位想要的话,可以问我要。那个程序原本预计一周完成的,可是没想时间远远超出了我的预计。后来,八月初才完成的。本想可以写了吧,没想又发起高烧了,结果久久没能写出文章,对各位对我的期望,我表示非常抱歉。如果你对于文章有什么意见,疑惑或者问题,可以到http://blog.csdn.net/visioncat上提出。我尽我所能将在第一时间回答您。


STUDIO软件开发组(SDT)

STUDIO Development Team

北斗星君(黄庠魁)




评论

#   bobo 发表于2006-08-17 11:40:00  IP: 222.185.204.* 终于等来新篇啦
#   bobo 发表于2006-08-17 11:50:00  IP: 222.185.204.* “Visual-MinGW似乎不能添加自己的项目类型”÷

指的是不是不能new?
#   北斗星君 发表于2006-08-17 14:32:00  IP: 58.34.89.* 不是的,你可以新建一个空白项目。
所谓不能添加自己的项目类型是说,不能添加自定义项目类型。

也就是说你不能在Visual-MinGW中,直接建立一个wxWidget等项目,只有通过新建空白项目,然后设置环境变量来完成。


希望我的回答能够让你感到满意。

星君上
#   俺是新手 发表于2006-08-18 22:44:00  IP: 210.45.74.* 因为左侧导航栏的关系,覆盖住了右侧的文字。不知道如何解决阿
#   Data 发表于2006-08-19 20:56:00  IP: 210.22.115.* 不错,呵呵。要是Kdevelop或者Anjuta能有Win版就好了。
#   北斗星君 发表于2006-08-20 08:56:00  IP: 58.34.98.* To 俺是新手
如果你说的是我文章的左侧导航栏。那我就没有办法了。不过,我用FireFox观看一切正常。你可以尝试一下。

To Data
呵呵,的确。不过,我本人觉得Kdevelop生成工程有些烦琐。而且Kdevelop所支持的QT在Win下并不是完全免费的。所以可能即使有,我也不太可能推荐。




最后谢谢两位的留言。
#   ShellEx 发表于2006-08-27 09:18:00  IP: 219.159.94.* 我的感觉是Code::Block还不如DevC++好用.
不过鉴于它是使用wxWidget编写,而且比DevC++血统要纯,还是比较看好的
#   beyondream 发表于2006-09-04 22:43:00  IP: 59.63.4.* 最近装了visual-mingw,不知道怎样用,不知道怎样设置,不知道怎样创建c/c++文件,很多问题都不知道。研究了很多次,能指一下路吗?
#   北斗星君 发表于2006-09-05 19:31:00  IP: 58.34.82.* to beyondream

不好意思,我其实也没有怎么研究过visual-mingw只是一个蹩脚的同学推荐我,我也只是粗略的看了一下感觉还可以,所以就推荐了。

其实,我个人觉得VM并不是很成熟。相对来说,CB和DC比较成熟一点。
#   吳太奇 发表于2006-09-19 18:18:00  IP: 218.94.57.* 都不是太好,期待更好的。
#   北斗星君 发表于2006-09-19 19:25:00  IP: 58.34.92.* 的确,这些IDE各有优点和缺点。

即使是VC++.Net的IDE也有很多人说它不好,更有人说他是垃圾。所以,从此我们可以看到,没有绝对完美的IDE。

IDE,在提供简洁的管理界面时,也同时损失了一部分的灵活性。所以,IDE的性能就好像,程序的时间空间平衡。

还是喜欢Emacs+Makefile管理。
#   qobnvi 发表于2006-10-14 00:11:00  IP: 218.18.41.* Code::Block对中文很差……
感谢北斗星君的好文章。
#   北斗星君 发表于2006-10-14 07:08:00  IP: 58.34.94.* qobnvi或者某甲。

我想请问,您所说的“中文很差”是什么意思呢?
能不能具体说一下是什么情况。

经过我的测试,Code::Block对中文的支持基本没问题,除了界面是英文的以外。

希望您能给出出现问题的现象。感觉应该是你使用不当才会出现的问题。
#   某甲 发表于2006-10-14 00:03:00  IP: 218.18.41.* Code::Blocks对中文的支持好差。
这个系列文章很不错。
#   haungsc 发表于2007-07-18 22:25:04  IP: 116.24.42.* Code::Block 不支持双字节的中文,比如说你输入一个中文字占用两个字节,你可以删除一个字节,即半个中文,然后剩余的就是乱码.

Source Insight 也就这个问题
#   北斗星君 发表于2007-07-20 10:32:23  IP: 58.34.253.* 这个,我倒是没有注意过。因为我代码里基本不用中文的。

上文回顾:

在上一篇文章中,我主要为大家介绍了有关IDE方面的内容。其中主要包括一些我个人比较喜欢的三个IDE。本文,我将为各位介绍GCC的编译参数以及组成和Makefile的使用方式。


GCC for Win32 开发环境介绍(4)


第三章 GCC粗探——GCC的组成与附加参数


第一节 GCC的家族成员


总的来说,GCC应该是一个编译器。可是,为什么我还要在这里介绍GCC的家族成员呢?其实,整套的GCC环境并不是由GCC构成的,他是由多个包所组成的。这些包的互相作用产生了GCC的开发环境。其中,有一些包是你开发应用程序所必备的基本包。离开这些包你将无法正常使用GCC


GCC的基本包列表。


GCC的基本开发环境,主要由一下几个包构成。Binutils,这个是辅助GCC的工具包,里面包含了连接器,汇编器,动态静态库生成程序,等等。GCC,这个包是GCC本身。当然GCC包中还包括一下几个包,如core,java,ada等,每个包都代表了一种语言。然后,就是win32api,mingw-runtime,这个是在Win32下使用的标准函数包。如果,你使用的是Cygwin或者是在Unix环境下,那么这个包就是GlibC


所以,由上所述。GCC的基本包有:binutils gcc glibc/[win32api,mingw-runtime]有了这些包。你基本能够开始编译应用程序了。


当然,如果说你想要写一个小程序。自然这些包已经够了。但是如果你要写一个较大的工程。那么,这些包也许就不能很好的胜任你的工作了。因为,对于一个大的项目,需要编译的文件不只一个,而且还有依赖关系等等。

所以,GCC中还包括gmake包用于管理项目。当然,还有automake。但是我个人还是不太喜欢automakeautomake其实是帮助你自动的管理你的项目,当然实现这个自动也是比较麻烦的,所以与其用automake管理中小型项目,不如用gmake自己写个脚本。不过,automake通常用于源代码发布的应用,如果在开发时使用会延长开发周期。

Gmake,automake,都是通过编译脚本来批量的编译程序。他们能够更具你所给定的依赖关系,来自动的判断需要重新编译的源代码,然后编译。这点的确可以帮助开发人员减轻不少的人力和开发周期。比如,你用Makefile管理一个项目,那么在你第一次编译程序以后,如果你的源代码没有做过任何编辑,那么下次再调用gmake的程序时,gmake就不会再去一一编译每个文件。而是简单的连接一下主程序,或者什么都不作的退出(这要取决于你写的Makefile脚本)


但是,对于有些开发人员来说,上面这些包还是不能满足他们的要求。因为他们要调试程序。所以,GCC还包括另一个包。那就是GDBgdbGCC开发的,用于跟踪调试的,命令符型调试器。它的功能还是比较强大的。基本,你能在VC下做到的,GDB也可以。不过,GDB的命令还是比较多的。掌握一些基本的调试命令一般就够使用了。


总结

GCC开发环境包括如下几大包。

binary

基本包

提供基本的汇编器,连接器等

gcc

基本包

各种语言的编译器,包括C,C++,Ada,Java

Win32api,mingwi-runtime/glibc

基本包

系统函数库

Gmake/automake

需要包

管理项目编译的程序

gdb

附加包

调试程序


第二节 GCC的常用编译参数


VC,TC等编译器不同,GCC其实是可以很方便的在提示符下编译程序的。GCC在提示符下编译程序,并没有如同VC那样的冗长而晦涩的编译参数。相反,却有着比VC更灵活且简短的参数。

不得不承认,不懂GCC编译参数的人,确实会损失一些GCC的强大功能。所以,我下面简单介绍一下GCC的一些基本编译参数。这里,我以C编译器为例。


编译二进制代码

$gcc -c yours.c -o yours.o

使用这段指令,GCC将会把yours.c编译成yours.o的二进制代码。其中,yours.o就类似于VC,TC中的.obj文档。


编译最简单的小程序。

$gcc -o yours yours.c

通过这条指令,GCC将会把yours.c源代码编译成名为yours的可执行程序。当然,您也可以将yours.c改成我们刚才介绍的yours.o文件。这样,gcc将使用编译刚才编译好的二进制文档来链接程序。这里,格式的特点是,-o 后面是一串文件列表,第一个参数是所编译程序的文件名,从第二个开始,就是您编译和连接该可执行程序所需要的二进制文档或者源代码。


编译时将自己的头文件目录设为默认头文件目录

$gcc -I”Your_Include_Files_Document_Path” -c yours.c -o yours.o

这条指令中的-I参数将会把Your_Include_Files_Document_Path添加到你默认的头文件目录中。这样您将可以使用 #include 来导入头文件。


编译时使用自己的静态库存放目录

$gcc -L”Your_Lib_Files_Document_Path” -o yours yours.o

这条指令将会让GCC在连接时除了在默认Lib存放目录中搜索指定的静态库以外,还会在Your_Lib_Files_Document_Path中搜索。


编译时使用静态连接库

$gcc -lyour_lib -o yours yours.o

这条指令将会让GCC在连接时把 libyour_lib.a中您所用到的函数连接到可执行程序中。此处注意,GCC所使用的静态连接库是lib*.a格式的。在连接时,只且仅需要提供*的内容就可以了。


编译时使用优化

$gcc -O2 -c yours.c -o yours.o

使用优化方式编译程序,其中除了-O2以外,还有-O3 -O1等等。他们代表不同的优化等级。最常用的,是-O2优化。当然,还有针对特殊CPU的优化,这里就不介绍了。


编译时显示所有错误和警告信息

$gcc -Wall -c yours.c -o yours.o

GCC在默认情况下,将对一些如变量申请未使用这样的问题或者申请了没有给予初始值的问题忽略。但是,如果使用了-Wall参数,编辑器将列出所有的警告信息。这样,您就可以知道您的代码中有多少可能会在其他操作系统下出错的地方了。(用这个指令看看你的代码有多少地方写的不怎么合适。)


编译连接时,加入调试代码

$gcc -g -o yours yours.c

正如同VCdebug编译模式一样,GCC也有debug模式。添加了-g 参数编译的可执行程序比普通程序略为大一些,其中添加了一些调试代码。这些代码将被gdb所支持。


连接时缩小代码体积

$gcc -s -o yours yours.o

这个参数,似乎我没有在Unix环境下看到过。也不知道具体什么作用。因为有人说Visual-MinGW生成的代码小,于是研究了一下她的编译参数,发现release模式的编译参数就加了这一项。貌似编译后的代码的确缩小了很多。


获得帮助

$gcc --help

这条指令从意思上就能看出,获得gcc的帮助信息。如果您有什么特殊需要,也许这个指令能帮上点小忙。


第三节 如何写一个简单的Makefile


说了半天Makefile管理项目,我想现在该说一下如何写了。其实,Makefile文件总体还是比较容易写的,基本只要你会使用命令行,就可以写Makefile。下面我简单介绍一下Makefile的构成和书写。


一个输出 HelloWorld 的简单Makefile

all:

echo HelloWorld

这个Makefile代码,运行后将在屏幕上打印一个HelloWorldall其实是类似C代码中的main函数。gmake程序将在运行Makefile代码时,首先运行此处的代码。注意,此处echo前面的是GCC对空格很敏感的。


添加依赖项的Makefile

all:depend

@echo I am the main

depend:closeecho

@echo I am the depend

closeecho:

@echo off

这个Makefile代码,的作用还是输出句子。不同的是她添加了几个指令块之间的依赖关系。其中all依赖于dependdepend依赖于closeecho。这样,程序在编译时将根据脚本的依赖关系来判断文件编译的先后顺序。


执行Makefile

$make -f Makefile

通常情况下,不用-f参数,make程序将在当前目录下搜索名为Makefile的文件作为需要执行的文件。而使用-f将指定Makefile的文件名。


一个完整的Makefile

all:yours

@echo OK

yours:yours.o

gcc -o yours yours.o

yours.o:yours.c

gcc -c yours.c -o yours.o


更多有关Makefile的详细内容请查相关资料。



文外音:

的确,发现了。我这个系列的文章进展的并没有我预期和承诺的那么快。确实挺让我感到无奈的。不过,幸好你能够理解我。总体来说,本文主要是简单介绍一下GCC的一些基础。因为我发现有许多读者对GCC并不是很了解。

说来也挺无奈的,最近发现原来周围有个小人当道。此人姓名我也就隐去了。从去年开始,就常常在和我聊得比较好的几个女生面前造我的谣。所以,原本应该9月该出来的文章拖延到了9月底。说起这个人,我希望大家要以此人为鉴。不要像他那样。

这人自称在硬件方面很行,不过据我所知,他无非就是可以把各种型号的主板和硬件编号背出来而已。连基本的线程进程都搞不清楚。还成天鼓吹32bit的机器是淘汰的机器。不得不承认,这位满口脏话为人无耻的家伙的确硬件方面挺不错的。但是,我还是觉得做技术的人不要太追求表面的东西,不要追求过于超前的东西,同时也更要注意自己的品行道德。

也许是年纪大了,发了一些牢骚。希望各位不要建议。不过,事以至次,我也无力挽回了。

最后感谢各位对我的支持,更感谢那些愿意为我效力的朋友们。同时,如果您有什么问题或者建议,都可以提出来。为了您能及时准确的得到回复请到http://blog.csdn.net/visioncat上发表你的留言。谢谢


STUDIO软件开发组(SDT)

STUDIO Development Team

北斗星君(黄庠魁)



评论

#   文章不错 发表于2006-09-30 17:11:00  IP: 59.191.41.* 文章不错

楼主说的那个坏蛋,大家一起诅咒它

以皎洁的月光之名,诅咒它。
#   北斗星君 发表于2006-09-30 18:33:00  IP: 58.34.81.* 谢谢楼上的赞赏。

它的确可恶。但是,我们还是要爱人如己,即使是自己的敌人,我们也要去爱它。


同时,在10.1日前夕,祝各位国庆长假快乐。
#   JanusLe 发表于2006-10-01 01:31:00  IP: 58.246.245.* scons其实我觉得不错的。因为可以用python写SConstruct(类似于makefile)相对灵活一些。其实我了解的也不是很深,只不过为Blender中文社区翻译过一些scons的文档,所以有一点了解。
http://wiki.blendercn.org/index.php/BlenderDev/SconsMan

至于硬件达人。他是系里面出名的说话无逻辑,无主题。并且喜欢夸大事实的人。呵呵,一般我不和他一般见识。
#   北斗星君 发表于2006-10-01 09:28:00  IP: 58.34.84.* 没想JanusLe也来了啊。欢迎。

谢谢你的建议。如果我没有记错的话Blender是一个三维制作软件吧。而且是开源的。貌似在哪个Linux发行版中推荐过的。

其实,我也只是在这些文章中简单介绍一下GCC而已。重点是在支持GCC的库上面,以及他们的使用。

最后,谢谢你的安慰。 不过,我原先也不想和它一般见识。可惜的是,我渐渐觉得它越来越过分了。

我看貌似JanusLe和它聊得很投机,平时貌似总是在一起的……
#   风行 发表于2006-10-01 12:22:00  IP: 218.69.179.* 已回
#   JanusLe 发表于2006-10-02 01:15:00  IP: 58.246.247.* 因为他最近问我为什么他的机器总是蓝屏。其实我也不知道为什么。我建议他打电话到微软询问一下。
#   北斗星君 发表于2006-10-02 07:48:00  IP: 58.34.86.* 恩,你认为一个使用盗版Windows操作系统的人,能获得微软的技术支持么?如果我是微软的我也不会给它提供帮助的。

另外,就算是这样……似乎它问的时间有些过长了吧。

(不是我多心,而是因为这无耻之徒到处散谬语。严重影响我的学习与生活,造成我感到莫大的诚信危机。)

我们都是成年了,有些时候必须为自己的话语负责。如果会情不自禁的造谣的话,比如像那位无耻之徒那样,那么不如把舌头割了,免得到时候害人害己。
#   bobo 发表于2006-10-02 21:23:00  IP: 222.185.206.* 出新文了,支持下
#   北斗星君 发表于2006-10-02 21:31:00  IP: 58.34.86.* 谢谢bobo对我的支持。
#   北斗星君 发表于2006-10-05 14:36:00  IP: 58.34.86.* 谢谢楼上ShellEX的提示。

恩。的确这样的人到处都是。

另外,别总是主啊主的。感觉在这样的技术类Blog上总说主的,很不协调吧,不是么?

呵呵。
#   ShellEx 发表于2006-10-05 10:43:00  IP: 219.217.44.* -s的含义是剥除所有符号,也就是说没法和-g参数共存..也就缩小了体积
#   ShellEx  发表于2006-10-05 10:48:00  IP: 219.217.44.* -s的含义是剥除所有符号,也就缩小了体积,但是没法和-g参数共存..也就没法调试了.
星君终于出新文章了...时间之长,原来是有小人干扰.没办法,这样的人哪儿都有,我这儿也有.
即便是主,也只是宽容他,但是不会纵容他.
#   ShellEx 发表于2006-10-07 09:15:00  IP: 219.217.44.* 别忘了是你教坏我的,呵呵呵
#   北斗星君 发表于2006-10-07 16:22:00  IP: 61.170.5.* 谢谢了啊。

The same to you.
#   北斗星君 发表于2006-10-07 12:07:00  IP: 61.170.5.* 有么?没有吧……

我什么时候教坏过你啊……


送上迟来的中秋祝福给你ShellEx
#   bobo 发表于2006-10-07 15:00:00  IP: 222.185.199.* 中秋快乐
#   sarrow 发表于2006-10-18 11:12:00  IP: 58.66.107.* 终于出新文了 -- 我等得黄花菜都凉了...
#   北斗星君 发表于2006-10-18 18:20:00  IP: 58.34.93.* 豆奶会有的,热黄花菜也会有的……
所以,新文章总会有的。
#   游客 发表于2006-11-08 14:47:00  IP: 59.64.148.* 北斗星君 年轻还是好,呵呵,不过为人言语所动说明还欠历练,复旦校风不错,专心你自己的爱好就够了。
#   北斗星君 发表于2006-11-08 19:50:00  IP: 58.34.94.* 谢谢楼上的赞赏。

同时,也谢谢楼上的教导。

我会注意的,以后看来还要多历练自己了。

上文回顾:

在上一篇文章里,我们主要看了一些有关GCC编译参数的内容。以及三个主要的GCC for Win32版本的安装与特性。下面我将逐一介绍GCC for win32开发库的安装与使用。当然,这些库都是能够支持多操作系统的。



GCC for Win32 开发环境介绍(5)


第四章 跨平台图像显示库——SDL


第一节 与SDL第一次亲密接触



SDL,也就是 Simple DirectMedia Layer 是一个针对 声音,键盘,鼠标,遥杆,通过OpenGL3D以及2D处理的底层跨平台函数库。她主要支持的平台有Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, QNX. 。当然,还有一些非官方的支持平台。


总体来说,SDL对于图像的处理性能还是不错的,而且能在基本不修改代码的情况下,能支持多平台的编译。这点的确是非常不错的。如果你想开发什么跨平台的游戏之类的,SDL确实是一个不错的选择。其次,SDL是用C写的,所以也可以得到很多其他语言的支持,主要有Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, Smalltalk


SDL的官方网站是 http://www.libsdl.org 我们可以从她的官网上免费获得其源代码和编译成功的库。其他的还有一些Demo,文档,基于SDL所扩展出来的库,成功的案例等等很多SDL的资料。


SDL的使用概览


在正式使用中SDL的易用性也是显而易见的。通过一些简单的代码便能够编写出图形的显示程序。而且,SDL的编程思想也是很容易理解的。


SDL的程序代码主要有四部分组成。她们分别是 初始化阶段,程序运行阶段,事件等待与处理阶段,资源释放阶段。


初始化阶段,主要完成程序的初始化工作。如SDL的函数初始化,还有程序自身的一些初始化操作,如窗口的建立,背景色的设置,等等。程序运行阶段,主要完成程序中所需要的媒体载入,和显示等,比如窗口的初始化内容的刷新等。事件等待与处理阶段,主要是用于等待窗口 键盘 摇杆 鼠标等事件然后更具程序所设定的进行相关的操作处理。资源释放阶段,主要用于释放程序中所用到的系统资源,如image图片资源的释放等。


这四个阶段的代码是非常容易实现,而且有一定的格式和方法。所以,相对来说虽然SDL的功能强大,但是代码的编写也还是比较清晰和简便的。


SDL库的编译与安装


SDL的安装分为两种,一种为从源码编译出库,然后安装。另一种是直接使用官网上为我们编译好的SDL库。下面我一一介绍不同的安装方式。


我们先来看看从源码编译安装的过程。

我们要从SDL的官方网站下载 SDL-1.2.x.tar.gz 。然后从MinGW的官方网站上下载MSYS-1.0.10.exemsysDTK-1.0.1.exe。第一个为SDL的源代码,第二个和第三个为MinGWPOSIX接口。如果你准备在Cygwin下编译,那么第二,第三个包就不需要下载安装了。

解压缩源码包到一个目录下,然后开启你的SH,切换到你SDL源代码所保存的目录下。然后输入如下的一组命令。


$./configure

$make


上面两条指令就让你的GCC编译出了SDL。如果你使用的是MinGW,那么可以将includelib,bin目录复制出来。这里我假设我们复制到 $(SDL) 目录中。如果你使用的是Cygwin,那么你需要输入如下命令让Cygwin自动安装。


$make install


当然,MinGW也是可以通过这种方式安装的。这样,SDL将安装入MinGWMSYS安装目录中。


你也可以从官方网站上下载已经编译好的开发库。所要是SDL的开发库 SDL-devel-1.2.x-mingw32.tar.gz。将开发包里的东西解压缩到 $(SDL)目录中。


通过以上两种方式,我们就已经将SDL的开发环境正常安装到我们的机器上了。


当然,最后别忘记把SDL.dll这个文件复制到系统目录下,或者放在环境变量PATH所指向的一个目录中,亦或是你主程序所在的目录下。这样你的SDL程序才可以正常运行。


一个简单的SDL例子


下面给出一个SDL例子程序的源代码,以及他的Makefile文件,我们可以从Makefile文件中很直观的看到编译程序所需要的参数。


下面是C的例子代码

//main.c

#include

#include

#include


int main(int argc, char *argv[]){


SDL_Surface *screen;

SDL_Event event;

int isRun=1;


SDL_Init(SDL_INIT_VIDEO);


screen=SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);


SDL_Flip(screen);

while(isRun){

SDL_WaitEvent(&event);

switch (event.type){

case SDL_QUIT:

isRun=0;

break;

}

}


SDL_FreeSurface(screen);

return(0);

}



下面是Makefile文件。

#Makefile

SDL_INCLUDE=$(SDL)/include

SDL_LIB=$(SDL)/lib/

all:

gcc -I$(SDL_INCLUDE) -c main.c -o main.o

gcc -L$(SDL_LIB) -o main main.o -lmingw32 -lSDLmain -lSDL


你所双击运行你所编译出来的程序,你将会看到一个类似于如下图所示的窗口。



上面那组代码的结构就是一个比较典型的SDL的代码格式。


初始化阶段

SDL_Surface *screen;

SDL_Event event;

int isRun=1;


SDL_Init(SDL_INIT_VIDEO);


程序运行阶段

screen=SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);


SDL_Flip(screen);


事件等待与处理阶段

while(isRun){

SDL_WaitEvent(&event);

switch (event.type){

case SDL_QUIT:

isRun=0;

break;

}

}


资源释放阶段

SDL_FreeSurface(screen);



至此,我们有关SDL库的简单介绍就到这里了。其实,SDL还有很多东西。我们将在后面的章节详细介绍SDL的神气功能。



文外音:

感觉自从上一篇文章至今已经过去很久了。其实最近感觉蛮忙的吧。但我也不知道自己忙点什么。不过这些日子所经历的事情也很多,感悟也很多。但是,心情却被这些事情弄的很不好。也许正像我所说的,光来到世界,世界却因为黑暗不来接受光,反而弃绝光。可如今作为一个普通人的我又能怎么样呢?争取我所爱的?还是等待所爱的?我向来不喜欢和人争,总认为该是我的,总会是我的,不该是我的怎么努力也是无用的。可是如今我却觉得也许我错了吧。呵呵,不游戏,不抽烟,不喝酒的我看来真的只适合搞搞技术什么的吧。

最后还是感谢各位一直以来的支持。同时,如果您有任何的问题和建议都可以提出来。为了您能及时准确的获得回复,请到http://nirvana.cublog.cn上,或者http://blog.csdn.net/visioncat上发表你的留言。谢谢。当然,还要为我那么长时间没来更新表示歉意。




NERVE软件开发组(NDT

NERVE Development Team

北斗星君(黄庠魁)



评论

#   ZackChen 发表于2007-05-13 22:36:58  IP: 124.160.108.* 知道吗?不知什么时候冒出了个wxDev-C++ ,听说是DEV-C++被其他一波人接过后开发的。网址是:
http://wxdsgn.sourceforge.net/

#   ZackChen 发表于2007-05-13 22:43:12  IP: 124.160.108.* 好像就是DEV-C++加上各种包后的产物,DEV-C++部分还是DEV-C++4.9.9.2版
#   ZackChen 发表于2007-05-13 22:44:11  IP: 124.160.108.* MSN:zack163@hotmail.com
#   柚子 发表于2007-05-26 10:19:58  IP: 58.67.29.* MinGW怎么设置输入EXE文件的路径啊?我第一次用,还不知道如何设置,请指教。
#   柚子 发表于2007-05-26 10:20:43  IP: 58.67.29.* 打错字,是输出EXE文件的路径
#   北斗星君 发表于2007-05-28 18:59:55  IP: 85.214.66.* 这个,应该是不行的吧。

通常的做法是在all标签后面,将你的那个exe文件剪切到你所要的目录内。

上文回顾:

在上一篇文章中,我们了解的一些SDL库的基本知识,以及应用。这一篇文章以及以后的若干篇文章,我们将对SDL的各个函数做更详细的了解。


GCCfor Win32 开发环境介绍(6)

第四章跨平台图象显示库——SDL

第二节函数库的详细介绍——基本函数


    在上一节中,我们已经了解了SDL的安装和基本的使用方法。还给出了编译使用SDL程序的源代码。接下来,我将带领各位深入SDL其中,逐一介绍SDL的各个函数。首先我们先从基本函数说起。

   当你需要在你的程序中使用SDL的时候。你首先要做的事情,就是在你的程序中初始化SDL。这个工作,你可以交由SDL_Init函数来做。SDL_Init函数可以初始化任何SDL所支持的子系统,其中包括图象,声音,摇杆,时钟等子系统。当然,在你使用SDL_Init函数初始化以后,你可以使用SDL_InitSubSystemSDL_QuitSubSystem函数来加载和卸载子系统的。当然啦,你的程序退出前,你必须卸载所有的子系统以释放系统资源。通过调用< /font>SDL_Quit,可以轻松的卸载掉你所加载的子系统并释放这些子系统的系统资源。

SDL_Init

  函数摘要
        #include“SDL.h”
        intSDL_Init(Uint32 flags);

  函数介绍
   这个函数是用于初始化SDL的,你必须在调用其他的SDL函数之前调用该函数。其中flags的参数和意义如下。当你需要初始化多个子系统的时候,可以用把这些参数或起来。


                                                                                                                                                        

SDL_INIT_TIMER

始化 计时器子系统

SDL_INIT_AUDIO

始化 音频子系统

SDL_INIT_VIDEO

始化 视频子系统

SDL_INIT_CDROM

始化 光驱子系统

SDL_INIT_JOYSTICK

始化 摇杆子系统

SDL_INIT_EVERYTHING

初始化以上全部的子系统

< /tbody>


  返回值说明
     返回 -1表示错误,返回 0表示初始化成功。


SDL_InitSubSystem

  函数摘要
     #include“SDL.h”
    intSDL_InitSubSystem(Uint32 flags);

  函数介绍
     在你通过 SDL_InitSDL初始化以后,你可以通过SDL_InitSubSystem函数来初始化那些没有被初始化的子系统。其中flags的参数定义和 SDL_Init的一样。

  返回值说明
     返回 -1表示错误,返回 0表示初始化成功。


SDL_QuitSubSytem

  函数摘要
     #include“SDL.h”
    voidSDL_QuitSubSystem(Uint32 flags);

  函数介绍
     SDL_QuitSubSystem函数可以卸载你曾经通过 SDL_Init或者 SDL_InitSubSytem函数加载的子系统,其中参数 flasgs的定义和 SDL_Init中的定义一样。


SDL_Quit

  函数摘要
     #include“SDL.h”
    voidSDL_Quit(void);

  函数介绍
     SDL_Quit函数可以卸载所有你所加载的子系统,并且释放这些子系统所占用的资源。这个函数一般是在程序退出以前调用的。< /font>


SDL_WasInit

  函数摘要
     #include“SDL.h”
    Uint32SDL_WasInit(Uint32 flags);

  函数介绍
     SDL_WasInit函数,允许你查看你所加载的子系统有哪些。其中flags的内容为你所要检查的子系统。

  返回值说明
     函数返回一组你所要检查的子系统加载情况的说明。是几个bit字的或。你可以用与操作来逐一检查你所要检查的子系统是否被加载。


    下面给出一组关于以上函数的Demo代码,以及他的Makefile

    SDL_General_Demo.cC代码

 & nbsp;                  

//NERVE Development Team
//SDL_General_Demo.c

#include
#include
#include

#define NOTE(msg) printf("NOTE: %s\n",msg)

int main(int argc,char *argv[]){
    SDL_Init(SDL_INIT_VIDEO);
    NOTE("load video subSystem");

    SDL_InitSubSystem(SDL_INIT_AUDIO);
    NOTE("load audio subSystem");

    if(SDL_WasInit(SDL_INIT_EVERYTHING)&SDL_INIT_AUDIO){
        NOTE("AUDIO  SubSystem was loaded");
    }else{
        NOTE("AUDIO  SubSystem is unloaded");
    }

    SDL_QuitSubSystem(SDL_INIT_VIDEO);
    NOTE("unload video subsystem");

    if(SDL_WasInit(SDL_INIT_VIDEO)){
        NOTE("VIDEO SubSystem was loaded");
    }else{
        NOTE("VIDEO SubSystem is unloaded");
    }

    SDL_Quit();
    NOTE("unload any subsystem of SDL");

    return(0);

            

}

        


    编译SDL_General_Demo.cMakefile文件。

 & nbsp;                  

#Makefile
CC=gcc
SDL_INCLUDE="D:/SDL/include"
SDL_LIB="D:/SDL/lib"
all:SDL_General_Demo.o
    $(CC) -L$(SDL_LIB) -o Demo SDL_General_Demo.o -lmingw32 -lSDLmain -lSDL
SDL_General_Demo.o:SDL_General_Demo.c
    $(CC)   -I$(SDL_INCLUDE) -c SDL_General_Demo.c -o SDL_General_Demo.o
           


按照以上两个文件的编译,我们可以得到一个名为Demo的可执行程序。当你执行 Demo以后。你将在Demo所在的文件夹内找到一个名为stdout.txt的文件。他是对 标准输入输出的重定向文件,你使用printf打印到终端的内容全部保存在这个文件内。下面是我的stdout.txt的内容


                    

NOTE: load video subSystem
NOTE: load audio subSystem
NOTE: AUDIO SubSystem was loaded
NOTE: unload video subsystem
NOTE: VIDEO SubSystem is unloaded
NOTE: unload any subsystem of SDL


文外音:

感觉现在的文章更新间隔是越来越长了,不过还是感谢各位对我的支持。我相信,我以后的文章更新会慢慢的加快节奏的。也同时感谢各位读者的支持和理解。呵呵,感觉一个学期又结束了,虽然在学期的结尾的时候和某个人发生了些不快。但是,我想我还是大度一点不和他计较了。同时我也觉得,人生中有很多事情是强求不来的,我们的一切都是早已在我们诞生以先就已经定下了,不论是我们在世上的疆界还是我们的财富。在上一阶段的时间里,我曾经充满希望,也曾经绝望过,但是不论何时我都觉得有种无形的力量在我绝望的时候扶助我,让我不至全然的扑到在地。如今,我真正觉得我曾经的绝望是如此可笑无知,因他让我见着希望~。所以,不论我们当前的处境如何绝望,只要抱着信心走在正直的道路上,我相信我们一定能看到曙光的。
如果你在阅读本文以后有任何的疑问,你可以到
http://nirvana.cublog.cn或者 http://blog.csdn.net/visioncat上提出问题。最后感谢各位对我长久以来的支持。



NERVE软件开发组(NDT)
NERVEDevelopment Team

北斗星君
(黄庠魁)


评论

#   Zack 发表于2007-07-24 13:13:04  IP: 124.160.106.* "某个人"是指《GCC for Win32 开发环境介绍(4)》中的那个人吧?生气对身体不好。还有我不同意楼主“我们的一切都是早已在我们诞生以先就已经定下了......”的说法,如果早已定下,那人还要“思想”作什么。
#   北斗星君 发表于2007-07-24 16:36:52  IP: 58.34.86.* Zack 的联想能力真的很佩服耶。呵呵能把这两篇文章联系起来。不过可惜不是那个人。不过是也好不是也罢。反正都已经过去了就随它去吧。

至于说你不同意我的观点~。呵呵,其实仔细想想我们的思想是从哪里来的?是我们通过学习以前人的思想以及我们通过我们所经历的思想而得来的。每个人在生活中都会做许多的选择,我们作出这样的选择又和我们曾经的选择有关。如此往复的往前推,我们发现看似一个偶然实则是必然的。那么按照这个理论,向前推导,我们会发现我们的未来也是必然的。
我们的一生都是一个必然的过程,这些必然是有规律的。只是站在地上的我们又怎能看到这全然广阔的世界呢?

星君上
#   Zack 发表于2007-07-24 22:06:25  IP: 124.160.113.* 前人的思想和自己以前的经历只不过对现在的选择产生一定的影响或者说提供了参考,而最终的决定依然要依靠你现在的意识。反之如果取决于前人的思想和自己以前的经历,那么人的存在不过是在执行一条一条的指令,人类社会的存在就不过是一串庞大复杂指令的执行。那么在理论上应该可以产生人工智能,而根据哥德尔不定式(我并不了解具体内容,只是知道)人工智能应该不可能产生。
#   北斗星君 发表于2007-07-25 10:09:57  IP: 58.34.253.* Zack也许你说的说对的。但是,我们只是人,从整个拥有恒定规律的宇宙中的一个小小尘埃。所以,作为小小尘埃的我们又怎么能看到我们前面的道路,和我们的未来呢?

用个不恰当的比喻,你说程序里的某个变量能知道自己什么时候被赋值,被赋予什么值么?不能。

如果说,你觉得你的思想是自由的,是凭借你的意识而非你原来的经历以及你周围环境影响所产生的话。那你又如何解释双胞胎的“心灵感应”呢?
我们常会发现,许多同卵双胞胎,她们的外表相似,她们的行为也相似。连选择也相似。其实这并不是心灵感应,而是由于她们的基因相似,她们的经历和周围的环境也相似所造成的结果。
我们都知道程序是没有所谓的心灵感应的,那为什么两组在不同计算机上的程序,在得到相同输入的时候会返回相同的输出呢?

人类命运的复杂性绝对超过人类的所知所想。就好像原子的运动轨迹是一样的,复杂无常但绝非偶然。


星君上
#   Zack 发表于2007-07-25 12:46:51  IP: 124.160.122.* 作为小小的尘埃我们不能预见自己的未来,但我们可以在每一个分支语句的地方选择自己的未来,而这个判断语句的判断结果是不确定的:我们完全可以做出一个不合理的完全错误的选择,我们不能选择什么时候被赋值,但我们可以选择不被赋值(也许程序会出错),而程序只能依照我们的设定作机械选择,它的结果是可以预见的。
一个人的选择我们只能判断可能的值,而最终的值可能超出这个集合也可能超出现有的所有集合。我们的未来存在的是不确定性,而方向取决于自己。
“心灵感应”和“同卵双胞胎”我觉得就好像是两台拥有同一个bug的计算机在相同的时间发生同样的错误。
#   北斗星君 发表于2007-07-26 00:46:24  IP: 58.34.253.* 或许说,你可以认为你能够不接受被赋值。但是这个宇宙是有规律的,是有一定法度的。你在不知不觉中就已经赋值了,你每天要呼吸要心跳,要喝水要吃饭,你所做的每件事都在影响着其他的事情。当然,你看到我的观点并在这里与我理论也是在安排之中的,然后你觉得不合理也是一样,那么你看了我的文章后极力想要摆脱这样的束缚,于是你今后所做的选择也会受到影响。这样我写出了文章也同样影响着你。

从同一个层面看,我们在这世上都彼此影响彼此。这些影响的结果都是必然的。这就好像打撞球一样。每时每刻,别人都影响着我们,每时每刻我们都影响着别人。然后通过这一系列复杂而微妙的运动,看似随机的世界却成了一个有着必然结果的世界。

就好像人类无法控制自然一样,在宇宙的强大下,人类的力量是如此的渺小。所以,虽然这样的事实你或这里的很多人都不能接受,但是这的确是事实。正如我们无法让万有引力消失一样,我们同样不能让这个事实消失。

当然,这并不是说这个世界就黯然无光了,因为我们的命运以我们人自身的力量是无法推测的,所以对于人自身来说,未来还是充满希望和未知的。

命定并不代表不劳而获,因为你若不劳作,那你不劳作也是在安排之中的,那因你的不劳作,你贫困潦倒也是你命中注定的。

呵呵,世界是运动的世界,在我说完那些话以后,这个世界又有微小的改变了。命定并不代表我们要像机器一样,相反我们在这世界上却成了独一无二的。因为,每个人对于世界都是独一无二的,我们每个人既来到了这个世界,就影响着这个世界,让她按着那命定的方向前行。而作为在这个世界上的人,我们所要做的就只是做我们自己。

呵呵,感觉这个是一个挺复杂的事情。还是那句。世界的轨迹就仿佛原子的运动,看似是随性而为,实则是有必然的联系。

呵呵,仔细想一下吧。

星君上