)Eclipse+WxWidgets開發環境搭建

來源:互聯網
上載者:User
文章目錄
  • 搞定wxWidget的配置、開始編寫像樣的windows程式
  • ----Richard Lee 回味
Eclipse+WxWidgets開發環境搭配

一直在尋找一個方便使用的C++GUI庫。今天終於把WxWidgets搞定。

大致的步驟是四步:
第一步,Eclipse及CDT的安裝
第二步,MinGW及編譯器的安裝配置
第三步,wxWidget的下載及編譯
第四步,Eclipse下有關wxWidget的配置

 

搞定wxWidget的配置、開始編寫像樣的windows程式----Richard Lee 回味

看了網上的絕大部分文章,多半解決不了什麼問題,還有可能誤入歧途,浪費更多的時間在前期這準備工作上。
所以,把這些配置的詳細步驟寫出來,希望能為後來者指點迷津,切莫再花時間再環境的搭建上了。
大致的步驟是四步:

第一步,Eclipse及CDT的安裝
第二步,MinGW及編譯器的安裝配置
第三步,wxWidget的下載及編譯
第四步,Eclipse下有關wxWidget的配置

經過這四步相信你就應該可以正常調試你的視窗程序了。
ok,我們開始。

第一步 Eclipse及CDT的安裝
這步其實沒啥說的,是最簡單的一步,用過eclipse及安裝過外掛程式的人都應該很快搞定。
下載Eclipse最新版本,到我寫這篇文章時應該是3.2版,由 http://www.eclipse.org 下載,當然首先你要先下載JDK並正確安裝和註冊環境變數path(將你的jre的bin目錄路徑cut到path裡),再啟動Eclipse 應該看到正常啟動畫面。
再到eclipse的網站上找到CDT,下載它,當然你應該選擇最近的版本下載。
下載後,進行解壓,並直接將解壓後得到的諸多檔案及檔案夾 Copy到Eclipse原目錄下。重新啟動Eclipse,這時再建立工程,你應該能見到 C/C++工程這項了。
到這裡,你的CDT算是安裝成功了。

第二步 MinGW及編譯器的安裝配置
這部分主要是MinGW的下載及安裝配置。
由於單獨的Eclipse + CDT 是不能完成C++工程開發的,因為至少還缺少編譯器及基礎類庫,這裡我們選擇MinGW工具,你需要到 http://www.MinGW.org 上去下載最新版本的MinGW。
到目前為止,最新版本是5.0.2版,你從它網站上直接download下來的應該是一個100多k的下載端軟體,還需要繼續下載全部內容,運行該下載檔案後,按要求逐步推進,如果你是下載壓縮包,即只下載需要的部分,那麼你選擇下載以下這幾部分

  • gcc-g++-3.4.2-20040916-1.tar.gz
  • gcc-core-3.4.2-20040916-1.tar.gz
  • mingw32-make-3.80.0-3.tar.gz
  • mingw-runtime-3.9.tar.gz
  • mingw32-make-3.80.0-3.tar.gz
  • binutils-2.15.91-20040904-1.tar.gz
  • w32api-3.6.tar.gz

下 載完成後,首先將他們拷貝到同一目錄下,並將它們解壓在同一目錄下面(例如我的mingw安裝目錄是c:\mingw,那麼需要將這7個壓縮檔全部直接 在c:\mingw解壓)。然後設定環境變數確保在PATH環境變數中包含"d:\mingw\bin",最後可以開啟DOS控制台輸入gcc來驗證環境 變數是否設定正確。如果你的DOS控制台顯示“no input file”等相關資訊,那麼你這一步也算完成了。
第三步,wxWidget的下載及編譯
wxWidget由 http://www.wxWidgets.org 下載並安裝,目錄自選。
安裝好後,直接進入你wxWidgets的安裝目錄 (舉例:c:\wxWidgets-2.8.0\build\msw)中,在這裡執行命令

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

通過makefile.gcc 這個檔案將整個項目編譯好,你會等很久大約半個多小時,編譯後目錄漲到800多M,因為一部分是.o的中間檔案,
可以刪除。

編譯後你會在安裝目錄的(c:\wxWidgets-2.8.0\lib\gcc_lib)下看到一堆副檔名為 .a 的Archive檔案(windows下的庫檔案為.lib
linux下為 .a)和幾個目錄,類似mswu,mswud。
第三步完成。

第四步,Eclipse下有關wxWidgets的配置

首先啟動你的Eclipse並建立一個Managed C++ Project。建立完成後右鍵該項目並選擇"Properties"屬性對話方塊在其中選擇“C/C++ Build"選項。
在C/C++Build選項介面中,選擇“Configuration Settings”的"Tool Settings“。
在Tool Settings中選擇"GCC C++ Compiler"->"Preprocessor",
在Defined symbols列表中加入:__WXMSW__ (注意,兩側都是雙底線), __WXDEBUG___UNICODE(此處是單底線,
因為你的wxWidgets是用unicode編碼編譯的,所以此處一定要設定該宏,不然在編譯時間會收到大量"undefined reference")。
接下來你需要選擇Directories項並添加include及lib目錄,在這裡你需要添加
"C:\wxWidgets-2.8.0\lib\gcc_lib\mswud"
"C:\wxWidgets-2.8.0\lib\gcc_lib\mswu"
"C:\wxWidgets-2.8.0\include"
"C:\wxWidgets-2.8.0\contrib\include"
這四個目錄進Directories。
接下來在下面的 Miscellaneous 選項中的Other Flags中輸入以下這句

-c -Wundef -Wno-ctor-dtor-privacy -fno-strict-aliasing

接下來點選到 "GCC C++ Linker" 部分。在這部分,首先選擇"Libraries"並在右側的Libraries欄中按順序鍵入以下庫名:

wxmsw28ud_xrc,wxmsw28ud_richtext, wxbase28ud_net, wxmsw28ud_dbgrid, wxbase28ud_odbc,wxmsw28ud_media, wxmsw28ud_aui, wxmsw28ud_html, wxmsw28ud_adv,wxbase28ud_xml, wxmsw28ud_core, wxbase28ud, wxtiffd, wxjpegd, wxpngd,wxzlibd, wxregexud, wxexpatd, kernel32, user32, gdi32, comdlg32,winspool, winmm, shell32, comctl32, ole32, oleaut32, uuid, rpcrt4,advapi32, wsock32, odbc32

庫名全部加入後在下面一欄的"Library search path (-L)"中加入以下目錄

"C:/wxWidgets-2.8.0/lib/gcc_lib"

"C:/wxWidgets-2.8.0/lib"

添加完成後,選擇該部分中的"Miscellaneous"項,並在"Linker flags"中鍵入

-Wl,--subsystem,windows -mwindows

此時,點擊應用。

再切換到"Build Settings"標籤頁,勾掉"Build Command"中的,"Use default command"前的勾兒,並將命令 make 改為

mingw32-make -fmakefile

最終,點擊"OK"使設定生效。

到這裡,你可以把wxwidgets中的samples拿來試一試了,把代碼Copy進你的工程,編譯運行一下,看看結果。

我想,你應該成功了。。。。

 

下面是第一個WxWidgets程式的代碼:

#include "wx/wx.h"
using namespace std;
class MyApp:public wxApp
{
    public:
    vrtual bool OnInit();
};
class MyFrame:public wxFrame
{
public:
    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) ;

    void OnQuit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);

    DECLARE_EVENT_TABLE()
};
enum
{
    ID_Quit = 1,
    ID_About,
};

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Quit, MyFrame::OnQuit)
EVT_MENU(ID_About, MyFrame::OnAbout)
END_EVENT_TABLE()

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame( wxT("Hello World"), wxPoint(50,50), wxSize(450,340) ) ;
    frame->Show(TRUE);
    SetTopWindow(frame);
    return TRUE;
}

MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
            : wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
    wxMenu *menuFile = new wxMenu;

    menuFile->Append( ID_About, wxT("&About...") ) ;
    menuFile->AppendSeparator();
    menuFile->Append( ID_Quit, wxT("E&xit") ) ;

    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append( menuFile, wxT("&File") ) ;

    SetMenuBar( menuBar ) ;

    CreateStatusBar();
    SetStatusText( wxT("Welcome to wxWindows!") ) ;
}

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
    Close(TRUE);
}

void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
    wxMessageBox(wxT("This is a wxWindows Hello world sample"),
    wxT("About Hello World"), wxOK | wxICON_INFORMATION, this) ;
}

 

註:
   編譯wxWigets時候mingw32-make -f makefile.gcc BUILD=release SHARED=0 UNICODE=1 USE_ODBC=1
   
SHARED = 0 表示 靜態編譯;SHARED =1 表示動態編譯
    USE_ODBC=1 是預設的(可設定為0)    :使用ODBC資料庫
    USE_GL = 1 是預設的
(可設定為0)       :使用OpenGL庫
    詳細編譯選項見<wx/setup.h>

    如果採用動態編譯,Defined symbols預定義?)中必須定義WXUSINGDLL,如果為Debug版本還得添加MinGW的執行階段程式庫mingwm10.dll。

    上面提到的:如果編譯Debug版本,需要定義__WXDEBUG__;Release版本則不需要。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.