GCC for Win32开发环境介绍(1)
第一章 在视窗操作系统下的GCC
第一节GCC家族概览
GCC是GNU公社的一个项目。是一个用于编程开发的自由编译器。最初,GCC只是一个C语言编译器,他是GNU C Compiler 的英文缩写。随着众多自由开发者的加入和GCC自身的发展,如今的GCC以经是一个包含众多语言的编译器了。其中包括C,C++,Ada,Object C和Java等。所以,GCC也由原来的GNU C Compiler变为GNU Compiler Collection。也就是GNU编译器家族 的意思。当然,如今的GCC借助于他的特性,具有了交叉编译器的功能,即在一个平台下编译另一个平台的代码。
如今,在Windows下比较流行的GCC移植版主要有三个。他们是MinGW,Cygwin和Djgpp。虽然,Djgpp是应用于DOS系统的,考虑到windows对DOS的兼容,所以也将Djgpp纳入其中了。
第二节 入乡随俗的MinGW
MinGW是Minimalistic GNU for Windows的缩写。她是一个建立在GCC和binutils项目上的编译器系统。和其他GCC的移植版相比,她可以说是最接近Win32的一个了。因为,MinGW几乎支持所有的Win32API,这也是MinGW的特色之一。她所连接的程序,不需要任何第三方库就可以运行了。在某种程度上看,MinGW更像是VC的替代品。
MinGW可以从MinGW的官方网站http://www.mingw.org上获得。
首先,你要从http://www.mingw.org/download.shtml上下载如下几个压缩包。考虑到文件的更新和文章的灵活性。我将只写出文件的主要部分,将省去版本好和更新日期。
gcc-core | C语言编译器 |
gcc-c++ | C++语言编译器 |
mingw-runtime | MinGW的运行时库(这个必须安装) |
win32api | win32的API函数头文件和连接库 |
binutils | MinGW的汇编器和连接器等基础工具 |
gdb | MinGW中的调试工具 |
mingw32-make | Make工具,用以更好的管理你的项目 |
最后到DOS终端上,将当前目录转换成$(MINGW)/bin 下。输入
C:/>gcc -v |
你可以从http://www.mingw.org/download.shtml上下载 MinGW5.0.2.exe这个程序。至少,在我写此文的时候,这个是最新版本。
对于设置,我们只需要在环境变量中的PATH变量中,添加$(MINGW)/bin这个路径就可以了。
第三节 人在曹营心在汉的Cygwin
Cygwin可以从Cygwin的官方网站获得安装程序http://www.cygwin.com/
在到了选择安装的组件时,在Devel选项下,将gcc-core,gcc-g++等前的skip点击成你所需要的版本号。
然后在Lib选项卡中,将glib2,glib2-devel,glib2-runtime前的skip点成版本号。
$cd /cygdrive/d/ |
第四节 脚踏两只船的Djgpp
Djgpp,可以从Djgpp的官方网站上下载http://www.delorie.com/djgpp/
总体来说,这篇文章写的有些匆忙。所以可能有些地方有不足。所以,希望各位能够多多原谅批评和指教。下一章,我将介绍GCC for Win32的IDE。同时,从这一章开始,我将向各位读者做一个小小的要求。那就是,希望你们能够将自己对这篇文章感到的不足告诉我,我将随时修改以发表的内容,以适合广大读者的要求。如果各位有什么想法或者意见,疑惑。希望您能到http://blog.csdn.net/visioncat上提出。
上文回顾:
在上文中,我们了解的windows下的GCC编译器。这一章我们将来看IDE的介绍了。在此,我还要为各位表示抱歉,因为那么久才写出这篇文章。
GCC for Win32开发环境介绍(2)
第二章GCC的外衣——IDE环境
第一节IDE for GCC概览
IDE,即Integrated development environment,也就是综合开发环境。对于习惯使用VC的windows程序员来说,在windows下,GCC的IDE也许就比较陌生了。所以,想通过这一章简单介绍一下GCC所使用IDE。
GCC的IDE是什么?
IDE,也就是 综合开发环境 。她是为了便于程序员开发,管理项目的软件。对于C/C++来说,她主要包括四个部分。代码编辑器,编译连接器,调试器和工具库。而GCC本身就包含了编译连接器,调试器和工具库。所以,严格的说,GCC的IDE主要功能就是一个代码编辑器,是用于编写代码的软件。
所以,从上面我们可以看到一个问题,那就是支持工具库的不是IDE,而是编译器。如果你使用不同的IDE开发项目,只要你使用的编译器是相同的,那么她就能支持相同的工具库。
Windows下的为GCC设计的IDE有那些?
许多GCC的IDE,毕竟不是商业化制作的,因此很多地方都有不足的地方。下面是我个人认为不错的几个IDE。
Dev-C++,这个IDE可谓是专门为GCC所设计的IDE。Visual-MinGW,一个模仿VC6.0界面的IDE。最后是最近最火的Code::Blocks,由于也是最近接触,所以也不是太了解,不过,给人的第一印象是,特别像VC.Net的界面。
总体来说,各个IDE都有其自身的特点。对于初学者,Dev-C++比较不错,因为各种工具库基本都有为Dev-C++设计的安装包。对于从VC转形到GCC的人来说,Visual-MinGW是一个不错的选择,因为据我所知,大家熟悉和喜爱的还是VC6.0居多,因此模仿VC的Visual-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这个包,这个也是我建议初学者安装的包。如果,你在上一章以后,已经安装了某个GCC的windows移植版,那么你可以选择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这个项目采用何种编译方式。0为windows窗口程序,1为控制台程序,2为静态连接库,3为动态连接库。 |
IsCpp | 变量是说当前项目是否只能使用C++语言,0表示不是,1表示是。 |
Compiler | 变量是编译器参数 |
Linker | 变量是连接器参数 |
Name | 变量是项目的名称 |
ProjectIcon | 变量是项目编译以后,主程序的图标文件。 |
下面给出了MyProjectC.txt和MyProjectH.txt的内容。
//MyProjectC.txt #include <stdio.h> #include <stdlib.h> #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上提出。谢谢。
上文回顾:
在上一篇文章中,我们了解的IDE和Dev-C++。这篇文章中,我将带领各位继续我们的IDE之旅。继续介绍Visual-MinGW和Code::Blocks。希望这些IDE能给各位在工作和学习中带来便利。
GCC for Win32开发环境介绍(3)
(第二章GCC的外衣——IDE环境)
第三节 最脸熟的Visual-MinGW
简介
Visual-MinGW是一个专门为MinGW所设计的IDE。如果,你曾经用过VC++ 6.0这个IDE,你的第一感觉就是,Visual-MinGW和VC++ 6.0非常相似。所以,对于曾经用惯VC的朋友们来说,Visual-MinGW不失是一个好的选择。然而,Visual-MinGW的开发与更新似乎并不积极。因此,还有不足的地方。Visual-MinGW的理念是提供一个高效的,快速的创建代码的IDE。
获得与安装
Visual-MinGW可以从他的官方网站http://visual-mingw.sourceforge.net获得。在官方网站上,您将看到有Development和Visual-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并不是某个编译器的特属IDE。Code::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-MinGW和Code::Blocks我了解并不多。前者是因为并不太喜欢,后者是由于刚出来。不过,还是希望我写的内容对各位有用。当然,我个人的喜好不会影响各位的使用。现在笔者没有使用其中任何一款IDE,笔者现在使用的IDE是我自己架设的,在Windows下我使用的是notepad作为我编写代码的工具,使用Makefile管理项目。所以,各位可以放心的选择各自喜好的IDE。不用担心会不被支持,或者被厌弃。至此,关于IDE的介绍将就到这里结束了。以后我将主要针对函数库本身做详细的介绍,并提供教程。
文外音:
首先,对各位读者表示抱歉。因为原本我准备趁着这次暑假多写一点东西的。可是,并没有预期的那么好。原本这篇文章应该在上个月写出来的。可是,上个月为了练习编程技巧,写了个Sudoku Puzzle,因此没能有时间写文章了。如果各位想要的话,可以问我要。那个程序原本预计一周完成的,可是没想时间远远超出了我的预计。后来,八月初才完成的。本想可以写了吧,没想又发起高烧了,结果久久没能写出文章,对各位对我的期望,我表示非常抱歉。如果你对于文章有什么意见,疑惑或者问题,可以到http://blog.csdn.net/visioncat上提出。我尽我所能将在第一时间回答您。
上文回顾:
在上一篇文章中,我主要为大家介绍了有关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。但是我个人还是不太喜欢automake,automake其实是帮助你自动的管理你的项目,当然实现这个自动也是比较麻烦的,所以与其用automake管理中小型项目,不如用gmake自己写个脚本。不过,automake通常用于源代码发布的应用,如果在开发时使用会延长开发周期。
Gmake,automake,都是通过编译脚本来批量的编译程序。他们能够更具你所给定的依赖关系,来自动的判断需要重新编译的源代码,然后编译。这点的确可以帮助开发人员减轻不少的人力和开发周期。比如,你用Makefile管理一个项目,那么在你第一次编译程序以后,如果你的源代码没有做过任何编辑,那么下次再调用gmake的程序时,gmake就不会再去一一编译每个文件。而是简单的连接一下主程序,或者什么都不作的退出(这要取决于你写的Makefile脚本)
但是,对于有些开发人员来说,上面这些包还是不能满足他们的要求。因为他们要调试程序。所以,GCC还包括另一个包。那就是GDB,gdb是GCC开发的,用于跟踪调试的,命令符型调试器。它的功能还是比较强大的。基本,你能在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 <your_include.h>来导入头文件。
编译时使用自己的静态库存放目录
$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 |
正如同VC有debug编译模式一样,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代码,运行后将在屏幕上打印一个HelloWorld。all其实是类似C代码中的main函数。gmake程序将在运行Makefile代码时,首先运行此处的代码。注意,此处echo前面的是<tab>。GCC对空格很敏感的。
添加依赖项的Makefile
all:depend @echo I am the main depend:closeecho @echo I am the depend closeecho: @echo off |
这个Makefile代码,的作用还是输出句子。不同的是她添加了几个指令块之间的依赖关系。其中all依赖于depend,depend依赖于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上发表你的留言。谢谢