CodeBlocks简易教程--共同学习进步(完成)
教程前言:使用了一段时间的VC6后,由于各种功能的需求,又不想安装VAX这类的商业插件,还因为VAX在Docments目录下面狂创建一堆的文件让人不爽,终于放弃了这个IDE,转而使用开源免费的CodeBlocks,这个IDE基本上满足了偶的需求,做为一款比较中量级的IDE,基于10.05版制作的CB绿色版才21.3MB左右,解压出来也不过100多MB左右,相比于巨无霸VC6、VS系列,非常小巧好用,便于U盘携带,是Windows下面学习C/C++的最佳助手。
在很多的编程论坛里,看到很多的C初学者提出的各种编程使用、编译器选择问题,大致是不知道怎么选择工具,不知道在哪里写代码,编译,运行,调试,往往这些问题基本上入门的人或是有一定水平的人跟本不愿回答,因而很容易造成初学者无所适从。本文是本人自己处理的Codeblocks 10.05绿色版的配套使用说明,部分引用网上已有的相关知识,以图文的方式带您快速了解这款英文版集成开发环境,同时讲解其内置编译器MinGW(Gcc)命令行编译的基础知识,帮您扫除C/C++学习道路上的障碍,了解IDE和编译器是如何协作,从而更快的进入学习状态,走进编程的大门。
绿色版下载地址:
http://u.
大小:CodeBlocks.7z 21.3MB
绿色版说明:
基于codeblocks 10.05制作,内置MinGW (gcc)4.4.1编译器
* 更新了10.05里面的win32 - sdk为3.17新版,支持ddk/sdk/dx/gdi++编程
* 重新编译了cb的帮助官方文档,减少了chm文件的尺寸。
+ 添加Depends.exe,来自微软的SDK XPSP2版本,用于查看文件依赖。
+ 添加Spy++,来自SDK XPSP2版本,用于查看窗口消息和信息的。
+ 添加c/c++标准库函数参考大全(中英版),来自cpprefence和网络。
+ ResEd 2.0.0.6c版,来自RadAsm汇编的一个用于资源编辑的免费软件。
以上新增加的内容均放在/add目录下面,部分新增工具使用见下面的教程。
CodeBlocks简介:
Code::Blocks是一个免费、开源、跨平台的C/C++ IDE,支持Windows、Linux、MacOSX。同时他还支持各种不同的编译器,如 GNU/MinGW C/C++,VC++ 6.0/2003/2005/2008,Borland C++,Digital Mars等等各种不同的编译器。经过14个组员长达2年对Code::Blocks的全部重写,终于发布了正式版8.02,最新版是10.05版,这个版本更包括了对构建基于wxWidgets的跨平台GUI程序的支持,堪比Visual C++。
wxWidgets则是一个十分优秀的跨平台的GUI框架,用其编写的C++应用程序可以十分方便地迁移到不同的系统上去。
Code::Blocks + wxWidgets两个同是支持跨平台的IDE和框架,使得跨平台的编程非常方便。然而Code::Blocks虽然包含了对wxWidgets的支持,但是却没有包含wxWidgets的构建环境,我们必须手动进行配置(多说一句,实际上是因为这个DD有点大,Dev CPP的相应编译包居然达到300MB之大,所以没法包含在官方的安装版本中。)
官方网站: http://www.
二进制下载:http://www.
源代码下载:http://www.
界面预览:
一。CB中一些常用设置和配置文件。
二。工程创建
三。创建源文件的二种方式。
四。编译、链接源程序。Realase和Debug。
五。调试
六。ResEd使用,创建资源文件。
七。多工程与配置。
八。minGW命令行编译
九。走出IDE的世界,我们一样有其它编程的选择。
结束语。
一、CB中一些常用设置和配置文件。
CB第一次使用的时候,需要进行一些简单的设置,个人认为以下几个地方设置可以搞一下,方便使用。
(1)菜单Setting/Editor/Gennerl settings,如下图所示,把字体选大一点,第二个地方就是自动括号那里,如果你喜欢自己敲括号,就取消对勾。
(2)菜单Setting/Editor/Code-completion and symbols browser,设置自动完成提示,如下图所示,第一个地方改成2,第二个地方往左拖,会更快的出现自动提示。
(3)菜单Setting/Editor/Source formatter,这里如下图所示,可以设置格式化源代码风格,使自己的程序代码更加美观,编辑中点右键选Format this file既可格式化你的源代码。
CodeBlocks的配置文件存放在系统盘:\Documents and Settings\用户名\Application Data\codeblocks\一个名叫Default.conf的文件中,是一个XML格式的文本文件,如果你将CodeBlocks放在U盘上带着的话,需要把这个文件拷到U盘上,以备不同的机器上使用你自己的配置。
二、工程创建
CodeBlocks提供类似于VC一样的工程管理,内置了很多类型的工程向导模版,我们以创建最简单的工程为例,如下图:
在下面的对话框里选择相应的C/C++类型。
然后在下面的对话框输入相关的工程名和存盘路径,就可以完成了,是不是很简单呢?
三。创建源文件的二种方式。
有至少两程方式,可以在上面创建的工程中添加新文件。第一种可以上面的已创建好的目录中,直接用windows提供的创建新文件功能,创建一个空的c/c++文件,然后如下图所示,右点工程,选add files...添加进工程之中。
第二种方式:可以从菜单File/New/file...添加新的源文件和头文件。
但是编译的时候,请在菜单Project/Properties中注意一下下图设置,是否有勾选下。未勾选的情况下,该文件不会被编译。
四、编译、链接源程序。Release和Debug。
OK,经过上面的步子后,我们就可以来编译生成程序了,如第一张图所示,点工具栏上最左边那个黄色齿轮,既可,如果你的程序通过编译,那么你将看到如图所示的提示信息:(图满了,下次又帖。)工具栏上有Build target可以选择Release和Debug两种生成方式,当需要调试时选Debug,当正式生成时选Release,虽然是废话,但还是要说。
五。调试
调试程序是每个写程序必须要掌握的,在CB中我们可以很方便的进行程序调试,先可以从下图中了解一下Debug菜单中的基本命令和快捷键,F5- 断点切换 F8-开始调试 F7单步执行,Shift-F7跳进函数体,在程序中将光标放到想要断点的程序行,按F5后,就可以继续按F8开始调试,这个时候,可以把如图中所示的反汇编窗口和变量监视窗口打开,拖放到你想放的位置即可,如果要添加某个你需要监视的变量,可以使用Debug/Edit watches...这里进行编辑。图见一楼。
六。ResEd使用,创建资源文件。
本节仅为Windows应用程序所用,学习基础c/c++的朋友可以跳过这一节。
首先,为了使用方便,我们把add/ResEd.exe这个应用程序添加到Codeblocks环境中来。选择菜单tools/configure tools。然后点添加add,在弹出的对话框中,name中输入例如Resource editor,Executable中选择add/ResEd.exe,working directory中选择add/目录做为工作目录。然后选择launching options下面最后一项,意思是运行是不行是控制台重定向捕获。点确定后,tools菜单就会多出一项,选择就可以执行ResEd这个程序了。
使用ResEd创建和编辑资源文件,新建时选择File/New Project新建工程,然后点选菜单Project/add Dialog等添加对话框,菜单,位图,字符串等资源进行设计,在保存前,为了使用C风格的资源,需要在菜单Option/Options第一个选项卡Exports中,Name Export Format 选 C defines,Default Export Filename那里输入resource.h或是其它.h文件名,所有的IDS才会导出到正确的头文件中,要不然导出的是汇编风格的。
七。多工程与配置。
编程过程中,我们可能会创建多个工程共同协作的项目,例如,包括静态库,动态库,主程序,在CB中一个WorkSpace工作空间可以包括多个project工程,如图所示,CB windows编译版本也是采用cbp工程项目进行编译的,如果在工程中引用了第三方库文件,或者使用了例如Win32 Socket网络库,WinMM 多媒体库函数,需要将对应的库文件添加进工程才能正确的编译,如下图所示。
八、minGW命令行编译
8.1 MinGW 是什么?
MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU ( http://www. )的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。MinGW是完全免费的自由软件,它在 Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序员熟悉Linux下的C++工程组织提供了条件。CodeBlocks内置此编译器在Codeblocks/MinGW目录下面,为TDM-MinGW,可以单独下载,另外还有MinGW-64,可以生成64位windows代码,可以去网上搜索下载。
8.2 为什么使用MinGW?
因为我和很多IT人士一样,不愿意吊死在$M这棵树上。且不说开源这个理念的伟大,仅仅就Windows的安全性也已经让人们很不安心了。如果再深入一点从编写程序来看,在C++标准尚不成熟时期产生的MFC今天看来基本上就是盖子大叔凭着个人(或许是$M公司^^)理解所使用的C++方言。在我们期盼C++0x时代到来之前,没有任何实际行动能比严格遵循C++的ISO标准更能表达我们对于C++这个伟大的哲学体系的尊重。 从这个角度来说,遵循ISO标准的实现就是好的实现。所以,MinGW不会比VC差,况且,他既是开源软件家族中的一员,也是*nix平台下事实标准GCC的翻版。如果有一天我们开始使用Linux平台了,会因为今天透过MinGW所了解的GCC知识而受益。
8.3 答疑与示例
Q:为什么要学习和掌握命令行编译?
A:了解并掌握一个程序的编译,链结过程是每个合格程序员的基本素质。也可以为你以后进入linux编程打下一定的基础。
所以我们依然以经典的hello world程序来进行示例,代码很短,所以不写注释了。
1.Console命令行版本:
文件名:main.c
代码:
程序代码:
#include <stdio.h> int main() { printf("hello world\n"); return 0; }
在命令行下面输入:
gcc -Wall -c -g -o main.o main.c 进行文件编译。
参数解释:
-Wall 打开所有的编译警告
-c 只时行编译,不进行链结。
-g 产生调试信息。
-o main.o 生成编译输出文件叫main.o
最后进行文件链结:
ld -Lc:\mingw\lib -o main.exe main.o c:\mingw\lib\crt2.o -lmingw32 -lkernel32 -lmsvcrt
参数解释:
-Lc:\mingw\lib 设置链结时库文件路径,不设置的话,-lmingw32这些参数会找不到的。
-o main.exe 设置输出最终的可执行文件main.exe。
c:\mingw\lib\crt2.o 这个是Windows系统的控制台程序初始化模块。
-lmingw32 -lkernel32 -lmsvcrt 这三个是指示链结时链上libmingw32.a libkernel32.a libmsvcrt.a相关库。其中后两个对应的是kernel32.dll和msvcrt.dll,基本的程序代码printf函数实际上调用的是puts函数,在msvcrt.dll动态库中。
当正式编译的时候,可以使用以下命令行以生成最小的EXE:
gcc -s -O2 main.c -mconsole
参数解释:
-s 编译生成汇编代码
-O2 进行目标代码优化,O1到O3范围
-mconsole 指定生成控制台程序。
虽然这里正式编译的示例没有上面步子那么多,但你依然需要如示例所示,明白一个程序倒底和哪些库/模块进行了链结。然后我们使用depends.exe查看程序与运行库依赖,如下图所示:
2.Windows版本:
文件名:main.c
代码:
程序代码:
#include <windows.h> typedef HINSTANCE _h; int WINAPI WinMain(_h hinst, _h hprev, LPSTR cmd, int nShow) { return MessageBox(NULL, "hello world!", "OK", MB_OK); }命令行输入:
gcc -c main.c
ld -L"C:\Program Files\CodeBlocks\MinGW\lib" main.o "C:\Program Files\CodeBlocks\MinGW\lib\crt2.o" -lmingw32 -lkernel32 -luser32 -lmsvcrt
这里示例的是如果是带空格的路径。
当正式编译的时候,可以使用以下命令行以生成最小的EXE:注意-mwindows表示的是生成windows应用程序
gcc -s -O2 main.c -mwindows
用depends.exe查看程序与运行库依赖。用spy++查看窗口消息和信息。
九、走出IDE的世界,我们一样有其它编程的选择。
通过上面的命令行编译,链结练习,相信你也明白了在IDE中点生成按钮时,背后做了哪些事情,OK,没有IDE的时候,我们难道就不能写程序了么?你是否还在为选择哪个IDE(VC6?dev cpp? trubo C? VS2008? VS2010? CB?)而为难?其实不用,Windows下面我们依然有其它选择,不用IDE,随便找个文本编辑器(世界上目前至少有1000多个文本编辑器可以选择,Notepad++, NotePad2, Programing NotePad。。。),甚至是记事本,都可以照样写程序,编译和链结,希望本文能带给和偶一样的初学者一些帮助。
结束语:
感谢您走完本章所有课程,如果还有其它问题或是更好的建议或是教程有问题,请在后面留言。
[ 本帖最后由 hellovfp 于 2011-7-23 16:42 编辑 ]