C++編程報告——WxWidget環境配置(IDE:CodeBlocks)

來源:互聯網
上載者:User
最近接了個關於C++的項目,需要跨平台性,所以轉載了一篇配置相關BLOG,此文章轉載連結:

  http://henrya2.blog.163.com/blog/static/754514192008102342642940

  1.簡介:

  Code::Blocks是一個跨平台的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,這個版本更包括了對構建基於wxWidgets的跨平台GUI程式的支援,堪比Visual C++。

  wxWidgets則是一個十分優秀的跨平台的GUI架構,用其編寫的C++應用程式可以十分方便地遷移到不同的系統上去。

  Code::Blocks + wxWidgets兩個同是支援跨平台的IDE和架構,使得跨平台的編程非常方便。然而Code::Blocks雖然包含了對wxWidgets的支援,但是卻沒有包含wxWidgets的構建環境,我們必須手動進行配置。另外,Code::Blocks有一個安裝包包含了MinGW的編譯器,如果使用別的編譯器,同樣也需要自己進行相應的配置。

  2.環境安裝:

  編譯器:

  你至少應該正確安裝了免費的MinGW/GCC編譯器或者是某種微軟的編譯器(Express editions是免費的,但是你還需要安裝Platform SDK)。如果是用MinGW/GCC,至少要準備gcc-core、gcc-g++、binutils、w32api以及mingw32-make包;同時,確保包含編譯器可執行檔的目錄(一般是C:/MinGW/bin)在Windows的PATH環境變數中。如果選擇MinGW/GCC編譯器,可以在直接選擇包含MinGW的Code::Blocks安裝包,見下一節。

  Code::Blocks

  請下載最新的8.02發布版。尚未選擇編譯器可以選擇包含MinGW的安裝包。

  wxWidgets

  你可以選擇下載wxWidgets的原始碼然後自己進行構建,或者是直接安裝先行編譯的wxPack。  

  wxWidgets原始碼

  安裝包較小,可以根據自己的需求進行自訂構建,但是需要花費長時間進行編譯。如果不清楚編譯選項,可能導致無法成功配置Code::Blocks。

  目前推薦的wxWidgets的版本是2.8.7。點擊此處下載wxWidgets 2.8.7原始碼Windows安裝包 (wxMSW-2.8.7-Setup.exe; 12.0 MB)。你也可以檢查一下wxWidgets的下載頁面看看有沒有更新的穩定版下載。強烈建議你將代碼安裝到不帶空格的路徑中。必須保證盤中至少有300MB的剩餘空間。

wxPack

  雖然安裝包達200MB,全部安裝需要3G,但是包含了先行編譯的所有可能用到的庫檔案,而且包含VC和GCC的兩種版本,可以不用去考慮構建選項了。

  當前wxPack的穩定發布版是 v2.8.7.03,基於 wxWidgets 2.8.7。點擊此處下載 wxPack v2.8.7.03 (wxPack_v2.8.7.03.exe, 236.9 MB)。你也可以查看wxPack下載頁面看看有沒有更新的穩定版下載。強烈建議將wxPack安裝到沒有空格的路徑中。如果你選擇只MSVC版本,應保證至少有700MB的剩餘空間;如果只選擇MinGW/GCC版本,則應保證至少有2.2GB的剩餘空間。

  注意:如果磁碟使用了NTFS格式,可以開啟檔案壓縮功能,上述的目錄在壓縮後可以減少50%的空間佔用。

  編譯wxWidgets

  使用wxPack則可以跳過這一步。

  開啟命令列(在開始菜單中點擊“運行”,輸入cmd並斷行符號)。如果使用的MSVC,你可以使用特定的用於設定環境變數的命令列。如果你使用的 MSVC版本還要求你單獨下載Platform SDK,確保全部包含了標準編譯工具和Platform SDK中要用到的環境變數。

  轉到wxWidgets的構建目錄,其中<wxWidgets>是源碼所在路徑,通常是C:/wxWidgets-2.8.7

  cd <wxWidgets>/build/msw

  執行構建命令,MinGW/GCC推薦的命令是:

  mingw32-make -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1

  MSVC推薦的構建命令是:

  nmake -f makefile.vc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1

  這個過程需要花很久,快的機器大概30分鐘可以完成,慢的可能就需要幾個小時了。

  如果使用的GCC的版本較新,構建過程中可能會出現大量的警告。這樣會明顯導致構建過程變慢;你可以將錯誤資訊重新導向到檔案中,在上述命令後面添加2> err.log,也可以通過2>nul直接禁止警告資訊。

  其中關於BUILD、SHARED、MONOLITHIC以及UNICODE選項的解釋,請仔細參考文章後面關於wxWidgets的構建參數的解釋,這些參數十分關鍵,他們直接定義了你所使用的基本的wxWidgets開發環境。你必須嚴格按照你的編譯參數設定Code::Blocks的設定精靈。

  3.在Code::Blocks中建立wxWidgets項目:

  在Code::Blocks的起始頁面中,選擇“Create a new project”,也可以在File菜單中,選擇“New” -> “Project…”。

  找到並選擇“wxWidgets project”,並建立,接下來會出現一個嚮導協助進行wxWidgets項目的配置:

  1>第一個頁面是簡介,可以選擇以後跳過。

  2>選擇你要使用的wxWidgets版本。如果你是按照本文的過程配置的,那麼你應該選擇“wxWidgets 2.8.x”。

  3>設定你的項目的名字的位置。

  4>輸入作者的資訊(非必要)

  5>選擇自動代碼和檔案產生的選項。

  6>選擇wxWidgets的位置。強烈建議在此使用全域變數:輸入“$(#wx)”(不包含引號)。如果你還沒定義這個全域變數,那麼全域變數對話方塊會出現,在Base Path中,選擇你的wxWidgets安裝路徑。其他路徑可以不用填。

  7>為你的項目選擇debug/release配置。推薦至少選擇debug配置。

  8>選擇你的wxWidgets構建選項。必須和你構建wxWidgets時所使用的選項一致!如果你按照本文之前的方式構建的,應該將 “wxWidgets Library Settings”下的全部三個選項選中。如果用的是wxPack,由於wxPack包含了各種不同的版本,所以你只需要選擇你需要的選項。這個頁面的另一個設定和wxWidgets的構建選項沒有關係,你可以按照喜好來選擇。如果,出於某種原因,你想使用調試版本的wxWidgets構建,選擇 “Configure Advanced options”然後在下一頁選擇“Use __WXDEBUG__ and Debug wxWidgets lib”。

  9>如果需要,選擇額外的庫。一般應用的話應該無須選擇其中任何一個。

  接下來,就可以選擇“Build and run”(F9)對程式進行構建並運行了。如果順利,你的wxWidgets應用程式就會出現。如果出現了什麼問題,你可以參考後面的常見問題。

  4.wxWidgets編譯選項簡介:

  BUILD

BUILD 控制wxWidgets構建調試版本(BUILD=debug)或者是發布版本(BUILD=release)。絕大多數情況下你只需要 wxWidgets的發布版本就可以了,因為你應該不想要去調試wxWidgets自身,同時你依然可以通過連結wxWidgets的發布版本來構建你自己的程式的調試版本。

  • 調試構建wxWidgets會建立帶有”d”尾碼的庫,例如”libwxmsw28d.a”、”wxmsw28d_gcc_custom.dll”。
  • 調試構建wxWidgets會在wxWidgets庫的輸出目錄中建立”mswd” 或者 “mswud” 目錄。
  • 發布構建wxWidgets建立的庫沒有”d”尾碼,例如”libwxmsw28.a”、”wxmsw28_gcc_custom.dll”。
  • 發布構建wxWidgets會在wxWidgets庫的輸出目錄中建立”msw” 或者 “mswu” 目錄。

  SHARED

  SHARED控制wxWidgets是構建DLL(SHARED=1)還是靜態庫(SHARED=0)。利用構建的DLL,主程式構建時間較快,可執行檔更小。但是可執行檔加上wxWidgets DLL的總大小更大,但是不同的可執行檔可以使用同一個DLL。

  • wxWidgets的DLL構建會建立匯入庫(如 libwxmsw28.a)以及DLL檔案(如wxmsw28_gcc_custom.dll)。你必須在發布你的程式的時候包含這個DLL。
  • wxWidgets的靜態構建只會建立靜態庫(如 libwxmsw28.a),發布的時候也無須包含wxWidgets的DLL。

  MONOLITHIC

  MONOLITHIC 控制是構建一個單一的庫(MONOLITHIC=1)還是多個組件庫(MONOLITHIC=0)。使用單一構建,項目的設定和開發會更加簡單,如果你同時使用DLL構建的話,你只需要分發一個DLL檔案。如果使用非單一構建(multilib),會構建出多個不同的庫同時你可以避免將整個wxWidgets的基本代碼連結到主程式,就可以去掉不需要的庫。同時你也必須確保你選擇了正確的組件庫。

  • wxWidgets的單一構建僅會建立一個wxWidgets匯入庫(如libwxmsw28.a)以及一個DLL(如wxmsw28_gcc_custom.dll)。
  • wxWidgets的多庫(multilib)構建會建立多個匯入庫(libwx28_base.a等)以及多個DLL檔案。
  • 無論何種wxWidgets構建,都會建立額外的靜態庫(如libwxexpat.a、libwxjpeg.a等)。這些庫對於wxWidgets的DLL構建一般是不需要的,但是當使用靜態構建的時候,則是必須的。

  UNICODE

  UNICODE控制wxWidgets以及你的程式是否使用支援Unicode的寬字元串。大多數Windows 2000或更高系統上的應用程式都應該支援Unicode。早期的Windows版本不一定有Unicode支援。你應該總是使用wxWidgets的_("string")_T("string")宏來確保硬式編碼字串編譯時間是正確的類型。

  • wxWidgets的Unicode(UNICODE=1)構建將會建立帶有"u”尾碼的庫,例如”libwxmsw28u.a”、"wxmsw28u_gcc_custom.dll”。
  • wxWidgets的Unicode構建會在wxWidgets庫的輸出目錄中建立"mswu”或"mswud”目錄。
  • wxWidgets的ANSI(UNICODE=0)構建建立的庫沒有"u”尾碼,例如”libwxmsw28.a”、”wxmsw28_gcc_custom.dll”。
  • wxWidgets的ANSI構建會在wxWidgets庫的輸出目錄中建立”msw”或”mswd”目錄。

  5.常見問題:

  出現類似於"wx/setup.h: No such file or directory”的錯誤

  你在構建選項中缺少了很重要的編譯器搜尋路徑。首先確認你是否在運行wxWidgets項目嚮導的時候正確選擇了wxWidgets的構建配置。如果重新運行嚮導並配置依然無效,那麼開啟你的項目的構建選項並給編譯起的搜尋路徑中添加"$(#wx.lib)/gcc_dll/mswu“(這裡假設是一個單一的Unicode DLL構建)。

  出現類似於"cannot find -lwxmsw28u”的錯誤

  構建選項中的連結庫錯了。首先確認你是否在運行wxWidgets項目嚮導的時候正確選擇了wxWidgets的構建配置。如果重新運行嚮導並配置依然無效,確定你構建了什麼庫,並相應在構建選項中調整庫的名字。

  6.小結:

  我已經在自己的機器上編譯通過,感謝該貼來源作者提供該資料,在此致敬:

  http://henrya2.blog.163.com/blog/static/754514192008102342642940

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.