注册 登录
编程论坛 C++教室

CodeBlocks简易教程--共同学习进步(完成)

hellovfp 发布于 2011-07-22 14:43, 44051 次点击
教程前言:

    使用了一段时间的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 编辑 ]
35 回复
#2
hellovfp2011-07-22 14:45
由于只能帖十张图,第五节至第七节图如下:
图5.1
只有本站会员才能查看附件,请 登录

图5.2
只有本站会员才能查看附件,请 登录

图6.1
只有本站会员才能查看附件,请 登录

图6.2
只有本站会员才能查看附件,请 登录

图7.1
只有本站会员才能查看附件,请 登录

图7.2
只有本站会员才能查看附件,请 登录

图8.1
只有本站会员才能查看附件,请 登录

图8.2
只有本站会员才能查看附件,请 登录

图8.3
只有本站会员才能查看附件,请 登录


[ 本帖最后由 hellovfp 于 2011-7-23 16:23 编辑 ]
#3
rjsp2011-07-23 08:27
Code::Blocks 太大了些,什么都想往里面包含
我更喜欢小巧的 CodeLite

wxWidgets 很不错,干净简炼,但开发人员太少了点
看起来还是 Qt 更胜一筹
#4
小鱼儿c2011-07-23 15:42
ooo 小鱼儿占一楼, 有时间一定试试,我们也了解编译 链接到底是怎么回事哦哦哦。。。。
                                   小鱼儿向hello问好了 呵呵
#5
hellovfp2011-07-23 16:28
回复 4楼 小鱼儿c
呵呵,这帖里可能有一些你想要知道的一些知识,以前没有给你讲的。也向你问好喽,假期快乐不?
#6
hellovfp2011-07-23 16:31
回复 4楼 小鱼儿c
另外图中所示的相关的程序都在绿色版中,21.3MB,感兴趣可以去下载,无毒的。
#7
小鱼儿c2011-07-31 13:44
回复 5楼 hellovfp
呵呵,还好。每天在学习啊。忙啊。。。时间不够用啊。
好多东西要学习啊。。
没有你效率快啊 啊  啊
#8
烟雾中的迷茫2011-07-31 17:33
哎  开始我也在用
后来还是改用 vc了
codeblocks 还不错
#9
hutuxu2011-08-03 16:52
来学习咯,不懂的好多呀
#10
逍遥迅2012-03-05 21:27
windows7 64位,用不了vc6++,所以开始用code block, 楼主贴很有用,非常感谢
#11
qshaao11222012-03-26 02:41
我是新手 想让人加我秋秋一起讨论 能加我秋秋 295116365 谢谢~~十分感谢
#12
qshaao11222012-03-26 02:44
回复 5楼 hellovfp
大神 求您加我秋秋
#13
xinfuankang2012-04-17 18:03
可以解释一下工程创建中的图标都是什么意思吗?
#14
十八子炎炎2012-06-07 15:48
换了win7 64位,又不想装虚拟机,来膜拜楼主
#15
Sumkor2012-06-16 22:49
自个儿折腾着codeblocks,见到这个教程感觉顿时良好
#16
mainal2012-06-25 12:15
求用wxWidgets开发GUI程序的教程
#17
Sheldon_cao2012-08-09 10:29
大爱啊,楼主。
#18
修雅2012-08-09 21:11
错误:您需要在“编译器”相关设置中指定调试器程序
这个错误怎么解决啊
#19
熊熊熊熊猫2012-10-19 11:09
学习了,谢谢
#20
无冬之夜2013-01-13 23:28
回复 10楼 逍遥迅
请问怎样可以把这个软件在编译时停顿一下啊?我以前都是用dev的,发现这个软件不能运行时停顿一下,一闪而过,请问这是什么问题啊?
#include <iostream>
#include<cstring>
using namespace std;

int main()
{
   int x=0;
   int n=0;
   int i;
   cout<<"请输入累加的数字n";
   cin>>n;
   for(i=1;i<=n;i++)
    {n=n+i;
    }
    cout<<n;

   
    return 0;
}

#21
hellovfp2013-01-15 12:09
以下是引用无冬之夜在2013-1-13 23:28:12的发言:

请问怎样可以把这个软件在编译时停顿一下啊?我以前都是用dev的,发现这个软件不能运行时停顿一下,一闪而过,请问这是什么问题啊?
#include <iostream>
#include<cstring>
using namespace std;

int main()
{
   int x=0;
   int n=0;
   int i;
   cout<<"请输入累加的数字n";
   cin>>n;
   for(i=1;i<=n;i++)
    {n=n+i;
    }
    cout<<n;

   
    return 0;
}

你想停一下,本身软件就支持,运行完成后,会出现提示按键才会返回.
你也可以在return 0; 之前加一句cin >> n;
#22
hellovfp2013-01-15 12:12
以下是引用修雅在2012-8-9 21:11:10的发言:

错误:您需要在“编译器”相关设置中指定调试器程序
这个错误怎么解决啊


说明你安装过后,又卸载了...你可以关掉cb,然后找到\Documents and Settings\用户名\Application Data\codeblocks\一个名叫Default.conf的文件..
删除了,然后重新运行cb,就可以编译了.
#23
randyyuan2013-01-28 11:18
,这个工具不熟悉呀。要学习。用了一下挺好用。
#24
qunxingw2013-02-28 16:12
再顶
#25
Susake2013-02-28 16:15
我用的就是这个...但是有缺陷...当你的系统是32位时...输出的中文是乱码...解决方案换64位系统...当然这不叫什么重大缺陷...反正用汉字的的频率低
#26
WQP1986782492013-06-24 00:22
谢谢教程,太感谢了
#27
kellybinble2013-09-08 23:01
我刚接触codeblocks,什么都不知道,看了楼主的贴,很有用,不过我对比帖子的时候觉得自己的codeblocks设置应该没有问题,但是写完一个简单的程序点build and run的时候出现了一个红色的长条,不知道怎么回事,希望楼主帮帮忙。。。
只有本站会员才能查看附件,请 登录
#28
新月牙2013-10-02 18:58
学习学习
#29
新月牙2013-10-03 14:16
回复 27楼 kellybinble
请问你这用的是什么函数 这个不是有错误的意思吗
#30
hsxhzby2014-06-08 19:06
从今天开始学习codeblocks,加油!
#31
mangdaoa2014-09-26 20:31
这个教程很棒.很有帮助
#32
磁光2014-11-02 10:52
很好啊
#33
wrjshixian2015-02-13 11:13
回复 32楼 磁光
请问你会了吗,教教我呗
#34
wrjshixian2015-02-13 11:13
他说我什么都没做是怎么回事
#35
qingqing13042016-01-12 03:39
感谢楼主,很有用的学习贴!
#36
风落球叶2016-09-22 16:58
1