zoukankan      html  css  js  c++  java
  • 编译Code::Blocks源码 with MinGW on Win

    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 一堆调试信息,搞死人。。。

      打开目录下的文件wxwidgetslibgcc_dllmswuwxsetup.h,要修改一点 把debug给去掉。。。

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

      

    1 #ifdef NDEBUG
    2 #define wxDEBUG_LEVEL 0
    3 #else
    4 #define wxDEBUG_LEVEL 0
    5 #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.2libgcc_dll里面的dll文件复制到codeblocks-code-10253-trunksrcdevel30_64目录下

    运行update30_64.bat即可

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

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

    为什么我的SVN号为0?

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

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

    后续:

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

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

      

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

          

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

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

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

        终于找到解决方法了。

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

      

     1 void TextCtrlLogger::UpdateSettings()
     2 {
     3     if (!control)
     4         return;
     5 
     6     control->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
     7 
     8     ConfigManager* cfgman = Manager::Get()->GetConfigManager(_T("message_manager"));
     9     int size = cfgman->ReadInt(_T("/log_font_size"), platform::macosx ? 10 : 8);
    10 
    11     wxFont default_font(size, fixed ? wxFONTFAMILY_MODERN : wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL,false,_T("Microsoft YaHei UI")); //我修改的部分
    12     wxFont bold_font(default_font);
    13     wxFont italic_font(default_font);
    14 
    15     bold_font.SetWeight(wxFONTWEIGHT_BOLD);
    16 
    17     wxFont bigger_font(bold_font);
    18     bigger_font.SetPointSize(size + 2);
    19 
    20     wxFont small_font(default_font);
    21     small_font.SetPointSize(size - 4);
    22 
    23     italic_font.SetStyle(wxFONTSTYLE_ITALIC);
    24 
    25     // might try alternatively
    26     //italic_font.SetStyle(wxFONTSTYLE_SLANT);
    27 
    28     wxColour default_text_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
    29     for(unsigned int i = 0; i < num_levels; ++i)
    30     {
    31         style[i].SetFont(default_font);
    32         style[i].SetAlignment(wxTEXT_ALIGNMENT_DEFAULT);
    33         style[i].SetTextColour(default_text_colour);
    34         style[i].SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
    35 
    36         // is it necessary to do that?
    37         //style[i].SetFlags(...);
    38     }
    39 
    40     style[caption].SetAlignment(wxTEXT_ALIGNMENT_CENTRE);
    41     bigger_font.SetUnderlined(true);
    42     style[caption].SetFont(bigger_font);
    43 
    44     ColourManager *colours = Manager::Get()->GetColourManager();
    45 
    46     style[success].SetTextColour(colours->GetColour(wxT("logs_success_text")));
    47 
    48     style[warning].SetFont(italic_font);
    49     style[warning].SetTextColour(colours->GetColour(wxT("logs_warning_text")));
    50 
    51     style[error].SetFont(bold_font);
    52     style[error].SetTextColour(colours->GetColour(wxT("logs_error_text")));
    53 
    54     style[critical].SetFont(bold_font);
    55     style[critical].SetTextColour(colours->GetColour(wxT("logs_critical_text")));     // we're setting both fore and background colors here
    56     style[critical].SetBackgroundColour(colours->GetColour(wxT("logs_critical_back"))); // so we don't have to mix in default colors
    57     style[spacer].SetFont(small_font);
    58 
    59     // Tell control about the font change
    60     control->SetFont(default_font);
    61 } /

      还有

     1 void ListCtrlLogger::UpdateSettings()
     2 {
     3     if (!control)
     4         return;
     5 
     6     ConfigManager* cfgman = Manager::Get()->GetConfigManager(_T("message_manager"));
     7     int size = cfgman->ReadInt(_T("/log_font_size"), platform::macosx ? 10 : 8);
     8     wxFont default_font(size, fixed ? wxFONTFAMILY_MODERN : wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL,false,_T("Microsoft YaHei UI"));//我修改的部分
     9     wxFont bold_font(default_font);
    10     wxFont italic_font(default_font);
    11 
    12     bold_font.SetWeight(wxFONTWEIGHT_BOLD);
    13 
    14     wxFont bigger_font(bold_font);
    15     bigger_font.SetPointSize(size + 2);
    16 
    17     wxFont small_font(default_font);
    18     small_font.SetPointSize(size - 4);
    19 
    20     italic_font.SetStyle(wxFONTSTYLE_ITALIC);
    21 
    22     wxColour default_text_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
    23     for(unsigned int i = 0; i < num_levels; ++i)
    24     {
    25         style[i].font = default_font;
    26         style[i].colour = default_text_colour;
    27     }
    28 
    29     ColourManager *colours = Manager::Get()->GetColourManager();
    30 
    31     style[caption].font = bigger_font;
    32     style[success].colour = colours->GetColour(wxT("logs_success_text"));
    33     style[failure].colour = colours->GetColour(wxT("logs_failure_text"));
    34 
    35     style[warning].font = italic_font;
    36     style[warning].colour = colours->GetColour(wxT("logs_warning_text"));
    37 
    38     style[error].colour = colours->GetColour(wxT("logs_error_text"));
    39 
    40     style[critical].font = bold_font;
    41     style[critical].colour = colours->GetColour(wxT("logs_critical_text_listctrl"));
    42 
    43     style[spacer].font = small_font;
    44     style[pagetitle] = style[caption];
    45 
    46     // Tell control and items about the font change
    47     control->SetFont(default_font);
    48     for (int i = 0; i < control->GetItemCount(); ++i)
    49     {
    50         wxFont font = control->GetItemFont(i);
    51         font.SetPointSize(size);
    52         control->SetItemFont( i, font );
    53     }//for
    54 } // end of

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

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

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

    在其中修改添加

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

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

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

    1 static const wxString release(wxT(RELEASE));
    2     static const wxString revision = wxT(" ")+ ConfigManager::GetRevisionString();
    3 
    4     wxFont largeFont(15, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD,false,_T("Microsoft YaHei UI"));
    5     wxFont smallFont(10, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD,false,_T("Microsoft YaHei UI"));
  • 相关阅读:
    vps云服务器建站后绑定域名的方法?
    怎么做局域网远程联机?
    解决服务器Active&nbsp;Directory环境里Windows登录性能问题办法
    搭建dns域名服务器过程
    服务器电源常见故障判断及处理方法
    有些网站为什么要使用CDN,CDN又是什么呢
    独立服务器使用技巧介绍
    云服务器和虚拟主机的区别
    CDN在中国的发展的九个年头的点点滴滴
    网络安全的攻防战争
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4482605.html
Copyright © 2011-2022 走看看