編譯Code::Blocks源碼 with MinGW on Win

Build Code::Blocks源碼html

              ---By 狂徒歸來c++

  CodeBlocks是一款很是優秀的IDE !惋惜的是沒有64位的版本,並且原本是輕量級別的IDE就應該夠輕,可以像記事本工具同樣,迅速啓動!更悲催的是Code::Blocks的正式版更新週期太長了,這一點比起CodeLite來講差遠了!既然CodeLite這麼好,爲何我沒有去使用CodeLite呢?主要緣由是CodeLite的不能不建工程項目就能進行編譯,這對初學者來講,是很蛋疼的一件事!macos

 

  我必須得吐槽一下,Code::Blocks 的官方資料比起CodeLite的官方資料來講,實在是差遠了。。。。遠不及CodeLite的資料詳細。爲了可以Build Code::Blocks ,在下期間走了不少彎路啊。真是一段狗血的經歷。爲了造福更多的初學者。因而有了這篇文章,若是此文對你有幫助,請點個贊!app

 

  爲何我要去追求64位軟件(個人電腦是64位,如今的電腦基本上都是64位)?由於64位軟件能夠更好的發揮64位機器的性能,所以軟件跑得更快!要的就是這種效果!有人問爲何64位的會更快?svn

  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環境變量了ui

  

 

 

  打開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了,對,就是這麼殘忍。。。

  

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.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,果斷改爲下面的。。。。瞬間感受這個世界好多了

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"));
相關文章
相關標籤/搜索