Build Code::Blocks源码

              ---By 狂徒归来

  CodeBlocks是一款非常优秀的IDE !可惜的是没有64位的版本,而且本来是轻量级别的IDE就应该够轻,能够像记事本工具一样,迅速启动!更悲催的是Code::Blocks的正式版更新周期太长了,这一点比起CodeLite来说差远了!既然CodeLite这么好,为什么我没有去使用CodeLite呢?主要原因是CodeLite的不能不建工程项目就能进行编译,这对初学者来说,是很蛋疼的一件事!

  我必须得吐槽一下,Code::Blocks 的官方资料比起CodeLite的官方资料来说,实在是差远了。。。。远不及CodeLite的资料详细。为了能够Build Code::Blocks ,在下期间走了很多弯路啊。真是一段狗血的经历。为了造福更多的初学者。于是有了这篇文章,如果此文对你有帮助,请点个赞!

  为什么我要去追求64位软件(我的电脑是64位,现在的电脑基本上都是64位)?因为64位软件可以更好的发挥64位机器的性能,因此软件跑得更快!要的就是这种效果!有人问为什么64位的会更快?

  32位和64位操作系统是指,CPU一次处理数据的能力是32位还是64位,这里涉及到的是处理器运算位数。简单的说32位系统的地址总线是32位的,而64位系统的地址总线是64位的。64位CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据(只要两个指令,一次提取8个字节的数据),比32位(需要四个指令,一次提取4个字节的数据)提高了一倍,理论上性能会相应提升1倍。多少位描述的是CPU单一指令的最长字长. 你可以简单的理解成CPU可以执行的指令是一句话, 这句话描述的内容越多指令的功能越丰富, 这句话越长能描述的内容自然越多. 所以64位字长处理器单一指令的功能更加丰富. 而CPU执行一条普通指令需要的时间是固定的. 一条64位指令的功能也许需要数十条32位指令才能实现(注意, 64位的可能0,1排列数是2的64次方, 32位是2的32次方, 数量级差距很大的), 所以64位执行效率更高。

  既然废话说得差不多了,下面就开始干正活了。

  编译Code::Blocks路上的第一道门槛:编译最新的wxWidgets!

  

  我也不知道wxWidgets是干什么的,反正这货貌似就是一个图形库,Code::Blocks以及CodeLite等软件的界面就是靠这玩意给折腾出来的。

  我们这里使用的编译器是这个GCC5.10 ,出自微软某位大神之手。我们假设你已经设置好了MinGW环境变量了

  

  打开cmd,进入你解压wxWidgets的子目录msw下,是的就是这么干!

  

  然后,我们使用的是64位的GCC,假设你是从我所提供的链接中所下载的编译器。

  接下来输入

make  -f Makefile.gcc SHARED=1 UNICODE=1 BUILD=release VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=gnu++11" MONOLITHIC=1 

执行一会儿后,按ctr+c,然后输入下面这行,进行提速。。开启多个线程make

  make -j8 -f Makefile.gcc SHARED=1 UNICODE=1 BUILD=release VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=gnu++11" MONOLITHIC=1

  

-j8表示八个线程,用于加快速度。。。

双核的设置成-j4就可以了

然后就是慢慢等了。。。千万记得,请使用-std=gnu++11

别的都不行,包括c++1y,c++11,c++14等等,都会导致编译失败。

待成功完成后,

  这个下面就会多出两个dll的文件,这个后面会用到的。。。

  下面进入第二道门槛:去掉wxWidgets 的调试信息

    如果不做这一步,会导致build Code::Blcosk 后,一运行Code::Blocks wxWidgets debug alert 一堆调试信息,搞死人。。。

  打开目录下的文件wxwidgets\lib\gcc_dll\mswu\wx\setup.h,要修改一点 把debug给去掉。。。

  这个跟CodeLite官网上说的不一样,我都改成0了,对,就是这么残忍。。。

  

 #ifdef NDEBUG
#define wxDEBUG_LEVEL 0
#else
#define wxDEBUG_LEVEL 0
#endif

  这样写即可。。。上面图片是第一次搞,不懂

  第三道门槛,build Code::Blocks源码

  首先是下载Code::Blocks最新的源码,必须的啊!不然,玩毛线啊!

选择Download Snapshot即可打包成zip后下载到本地。

解压后,进入src文件夹下

是的,我们在Code::Blocks中打开CodeBlocks_wx30_64.cbp

有个小插曲,我们哟啊先把zip工具给放到mingw的bin目录下,build完会执行zip命令的,不然又出错。。。

点击这里下载

这里面的东东都复制到MinGW的bin目录下

设置全局环境:Settings -> global variable editor

  一定要写-std=gnu++11

  否则。。。一定会出错的。。。原因还是出在wxWidgets身上。

最后把wxWidgets-3.0.2\lib\gcc_dll里面的dll文件复制到\codeblocks-code-10253-trunk\src\devel30_64目录下

运行update30_64.bat即可

生成的output30_64目录下就是你的发行版

这是我编译的Code::Blocks x64版

为什么我的SVN号为0?

这个嘛,先安装TortoiseSVN,然后安装CollabNet 

使用svn 的checkout下载源码,build后就有svn 后面的号码了

后续:

  1. startherepage的字体太丑了怎么办啊?

  丑成这样是不是没得救了啊!放心,还有得救

  

看看修改前是什么样子,是不是丑哭了啊!

      

找到这一段代码/src/startherepage.cpp,果断改成下面的。。。。瞬间感觉这个世界好多了

 wxFont systemFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
int sizes[] = {};
for (int i = ; i < ; ++i)
sizes[i] = systemFont.GetPointSize();
m_pWin->SetFonts(_T("Microsoft YaHei UI"), _T("Microsoft YaHei UI"), &sizes[]);

  2.什么Build Messages的字体也很丑?是的,目前,我还没找到解决方法!默哀!

    终于找到解决方法了。

  在sdk/loggers.cpp源码文件里面

  

 void TextCtrlLogger::UpdateSettings()
{
if (!control)
return; control->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); ConfigManager* cfgman = Manager::Get()->GetConfigManager(_T("message_manager"));
int size = cfgman->ReadInt(_T("/log_font_size"), platform::macosx ? : ); wxFont default_font(size, fixed ? wxFONTFAMILY_MODERN : wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL,false,_T("Microsoft YaHei UI")); //我修改的部分
wxFont bold_font(default_font);
wxFont italic_font(default_font); bold_font.SetWeight(wxFONTWEIGHT_BOLD); wxFont bigger_font(bold_font);
bigger_font.SetPointSize(size + ); wxFont small_font(default_font);
small_font.SetPointSize(size - ); italic_font.SetStyle(wxFONTSTYLE_ITALIC); // might try alternatively
//italic_font.SetStyle(wxFONTSTYLE_SLANT); wxColour default_text_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
for(unsigned int i = ; i < num_levels; ++i)
{
style[i].SetFont(default_font);
style[i].SetAlignment(wxTEXT_ALIGNMENT_DEFAULT);
style[i].SetTextColour(default_text_colour);
style[i].SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); // is it necessary to do that?
//style[i].SetFlags(...);
} style[caption].SetAlignment(wxTEXT_ALIGNMENT_CENTRE);
bigger_font.SetUnderlined(true);
style[caption].SetFont(bigger_font); ColourManager *colours = Manager::Get()->GetColourManager(); style[success].SetTextColour(colours->GetColour(wxT("logs_success_text"))); style[warning].SetFont(italic_font);
style[warning].SetTextColour(colours->GetColour(wxT("logs_warning_text"))); style[error].SetFont(bold_font);
style[error].SetTextColour(colours->GetColour(wxT("logs_error_text"))); style[critical].SetFont(bold_font);
style[critical].SetTextColour(colours->GetColour(wxT("logs_critical_text"))); // we're setting both fore and background colors here
style[critical].SetBackgroundColour(colours->GetColour(wxT("logs_critical_back"))); // so we don't have to mix in default colors
style[spacer].SetFont(small_font); // Tell control about the font change
control->SetFont(default_font);
} /

  还有

 void ListCtrlLogger::UpdateSettings()
{
if (!control)
return; ConfigManager* cfgman = Manager::Get()->GetConfigManager(_T("message_manager"));
int size = cfgman->ReadInt(_T("/log_font_size"), platform::macosx ? : );
wxFont default_font(size, fixed ? wxFONTFAMILY_MODERN : wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL,false,_T("Microsoft YaHei UI"));//我修改的部分
wxFont bold_font(default_font);
wxFont italic_font(default_font); bold_font.SetWeight(wxFONTWEIGHT_BOLD); wxFont bigger_font(bold_font);
bigger_font.SetPointSize(size + ); wxFont small_font(default_font);
small_font.SetPointSize(size - ); italic_font.SetStyle(wxFONTSTYLE_ITALIC); wxColour default_text_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
for(unsigned int i = ; i < num_levels; ++i)
{
style[i].font = default_font;
style[i].colour = default_text_colour;
} ColourManager *colours = Manager::Get()->GetColourManager(); style[caption].font = bigger_font;
style[success].colour = colours->GetColour(wxT("logs_success_text"));
style[failure].colour = colours->GetColour(wxT("logs_failure_text")); style[warning].font = italic_font;
style[warning].colour = colours->GetColour(wxT("logs_warning_text")); style[error].colour = colours->GetColour(wxT("logs_error_text")); style[critical].font = bold_font;
style[critical].colour = colours->GetColour(wxT("logs_critical_text_listctrl")); style[spacer].font = small_font;
style[pagetitle] = style[caption]; // Tell control and items about the font change
control->SetFont(default_font);
for (int i = ; i < control->GetItemCount(); ++i)
{
wxFont font = control->GetItemFont(i);
font.SetPointSize(size);
control->SetItemFont( i, font );
}//for
} // end of

现在已经可以修改下面的build messages 那里面的字体了

3.我们现在该修改about里面的字体了。。。

找到src/dlgabout 里面的函数 adlgAbout::dlgAbout(wxWindow* parent)

在其中修改添加

  wxFont wf(, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT,false,_T("Microsoft YaHei UI"));
//我添加的
XRCCTRL(*this, "txtThanksTo", wxTextCtrl)->SetFont(wf);//我添加的
XRCCTRL(*this, "txtLicense", wxTextCtrl)->SetValue(LICENSE_GPL);
XRCCTRL(*this, "txtLicense", wxTextCtrl)->SetFont(wf);//我添加的
XRCCTRL(*this, "lblName", wxStaticText)->SetLabel(appglobals::AppName);

4.是不是觉得splash中的svn版本号字体不给力?好吧,方法在此

在src/splashscreen.cpp中的函数void cbSplashScreen::DrawReleaseInfo(wxDC  &dc)中修改如下内容

 static const wxString release(wxT(RELEASE));
static const wxString revision = wxT(" ")+ ConfigManager::GetRevisionString(); wxFont largeFont(, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD,false,_T("Microsoft YaHei UI"));
wxFont smallFont(, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD,false,_T("Microsoft YaHei UI"));

编译Code::Blocks源码 with MinGW on Win的更多相关文章

  1. 【Code::Blocks】windows 环境下编译 Code::Blocks(已修正)

    Code::Blocks 在2012-11-25发布了最新的12.11版本,相比上一个版本(10.05),Code::Blocks 进行了许多改进和更新(Change log). 引用 Wikiped ...

  2. 使用idea编译spring-framework5.0源码

    自从迈入java开发这个行当,从来没有好好的研究过源码,深感惭愧,话不多说,今天上一篇使用idea编译spring5.0源码. 以下在win中构建和编译过程分为 jdk环境的配置 gradle的下载和 ...

  3. msvc2013编译qt5.6源码

    1.回顾 说起到qt的编译,真是领人痛心啊,不仅编译选项繁多,而且编译时间比较久,总是能使想编译qt源码的人望而却步,呵呵...我就是其中一个,不知道从什么时候开始就想着把qt的源码编译一下,也尝试过 ...

  4. Ubuntu 下载 & 编译 Android5.1 源码

    ustc & tsinghua android srchttps://lug.ustc.edu.cn/wiki/mirrors/help/aosphttps://mirrors.tuna.ts ...

  5. vs2008编译FileZilla客户端源码

    vs2008编译FileZilla客户端源码 下载FileZilla客户端源码,下载地址https://download.filezilla-project.org/. FileZilla客户端解决方 ...

  6. 编译Solr4.72 源码没有成功

    最近需要用到solr,查询Hbase里面的数据,编译Solr的时候遇到了点问题: 下了solr的源码后需要用ant自己编译: 源码下载地址:https://svn.apache.org/repos/a ...

  7. Atitit.反编译apk android源码以及防止反编译apk

    Atitit.反编译apk android源码以及防止反编译apk 1.1. Tool  apk逆向助手1 1.2. 二.使用dex2jar + jd-gui 得到apk的java源码1 1.3. 用 ...

  8. 在Ubuntu Server14.04上编译Android6.0源码

    此前编译过Android4.4的源码,但是现在Android都到了7.0的版本,不禁让我感叹Google的步伐真心难跟上,趁这周周末时间比较充裕,于是在过去的24小时里,毅然花了9个小时编译了一把An ...

  9. 编译android5.0源码的

    java环境 Android 5.1 用到的jdk不再是Oracle 的 jdk ,而是开源的 openjdk,在ubuntu安装好后,使用如下命令安装jdk: $sudo apt-get insta ...

随机推荐

  1. matlab的figure窗口命名为中文

    figure('NumberTitle', 'off', 'Name', '我的窗口名字');

  2. bootstrap suggest搜索建议插件

    近日因工作需要看了下此插件. 首先下载bootstrap js包.添加此插件的引用.注意css样式要引用,不能忘记. 前台页面代码,因为楼主做的是选项卡切换查询不同的结果. <tr> &l ...

  3. git提交远程报错[rejected] master -> master (fetch first)

    1 先下载git for windows 然后一直点下一步安装. 2 安装之后,选择git gui.生成ssh 链接 git 公钥. 用命令也可以: $ ssh-keygen -t rsa -C &q ...

  4. machine learning学习笔记

    看到Max Welling教授主页上有不少学习notes,收藏一下吧,其最近出版了一本书呢还,还没看过. http://www.ics.uci.edu/~welling/classnotes/clas ...

  5. 前端HTML基础

    1.0开发工具介绍 sublime的使用技巧链接 HTML特殊符号表 1.1 html概念 超文本标记语言(Hypertext Markup Language),属于一种描述性的标记语言(markup ...

  6. 2.Spring Cloud初相识--------Eureka服务注册与消费

    前言: 1.Eureka介绍: Spring Cloud Eureka,使用Netflix Eureka来实现服务注册与发现,它既包含了服务端组件,也包含了客户端组件,并且服务端与客户端均采用Java ...

  7. Erwin 简单使用

    1. 物理设计:汉译英过程 ① Logical 中操作:Tools-Names-Edit Naming Standards…-Glossary选项import,导入内容为编辑好的CSV文件(只包含中文 ...

  8. ElasticSearch High Level REST API【7】聚合

    获取平均值聚合示例,最大值.最小值.求和类似 public void aggregation(){ RestHighLevelClient client = elasticClient.getRest ...

  9. MLT教程:从BXL文件导入Altium Designer原理图封装和PCB封装

    在TI官网的封装文件中提供弄BXL文件可以导出Altium Designer的封装库和原理图库. 这个界面往下面拉会看到: 然后可以下载各种封装的bxl文件了.下面视频说明bxl文件如何导出成功. 如 ...

  10. 4、spring boot 配置文件之profile

    Profile  1.多Profile文件 我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml 默认使用application.prop ...