Dev-C++ & MinGW & wxWindows2.6.2 开发环境的配置

             最近对wxWidgets产生了兴趣,想用用这个东西.  本来用VC6环境来对wxWindows进行配置,是最简单不过的了. 但我想到这个东东既然是可以在Linux下run的东西, 还是用MinGW下来使用他吧. 乘这个机会也学点gcc的使用.  经过一两天的摸索, 总算搞定.
        一. 准备工作
              wxWidgets2.6.2: 可以到www.wxWindows.org下载. 建议下载所有平台版(All ports combined )的.这样在linux下也可以编译使用.
              MinGW(5.02): 我下载的是一个网络安装版的. 使用网络安装版时建议下载所有部件(花不了多少时间,看了下就9个包左右).
              MYSYS1.0.11: Windows下一个仿Linux环境, 在编译wxWidgets时需要它.   
              以上两个包最新的下载地址可以到 sourceforge.net 上去查询. 下面是我用的下载地址.      MinGW: http://umn.dl.sourceforge.net/sourceforge/mingw/MinGW-5.0.2.exe
              Dev-C++: 我使用的是最新的4.9.9.2版本. (按:用了这么多的IDE,发现还是MS 的Visual Stdio系列的IDE最好用. 虽然有很多开源的IDE,但大多使用起来不是太方便,Dev-C++算用起来比较顺手的一个. 另外 MinGW Developer Studio也不错. 难怪在Linux下众多高人们还是情愿使用VIM和Emacs.)
        二. 安装
              分别安装MinGW,MYSYS,Dev-C++到系统上. 安装时一路下一步就OK了. 另外在安装Dev-C++时值得提请注意的是,它会提示是否要跟系统的.c,.cpp等文件相关. 如果你不想这样,最好去掉这些选项.
         三. 编译wxWidgets
              先将wxWidgets解压缩到硬盘上.我机器上为d:/wx. 运行mysys,进入wx目录( cd /d/wx ).
              创建两个目录build_d,build_r分别用来编译Debug版的库和发布版的库. 先创建Debug版的库.
               cd build_d
                运行配置命令:
               ../configure --with-msw --enable-debug --enable-debug_gdb --disable-shared --enable-monolithic
                 (说明: --with-msw 表示编译ms window的版本, --enable-debug 和 --enable-debug_gdb 标准表示配置debug版的库. --disable-shared 将编译静态的库. wxWidgets的作者建议使用静态库,这样在将来的应用程序升级时就方便些,因为不用在重复发布那么多的dll了. --enable-monolithic将把wxWidgets的核心库编译到一个库文件. 这样做的好处时就是比较省事)
               等配置完成后,就可以运行
                make
               进行编译了. 编译时间跟你机器性能相关.
                编译完成后,运行
                make install
                可以把已经装好的库安装到mysys的环境中.这一步在windows下并不一定要做.因为我们并不一定会在mysys下来开发.
                在运行make install 后,为了验证安装是否成功,可以编译一下wx自带的sample来看看.
               (当前路径为/d/wx/build_d)
                cd sample/minimal
                make
                 如果编译成功, 则表示安装完成了. 可以运行
                ./minial.exe
                 看看效果
                 在这里我建议新建一个目录,把库都拷贝出去,方便以后搭建dev-C++的环境. 下面是我的操作.
                 (当前路径为 /d/wx/build_d)
                 mkdir /d/wxlib
                 cp -R -u lib /d/wxlib
                将库文件拷贝出去备份.
 
                 接下来是编译Release版.
                 (当前路径为/d/wx/build_d)
                 cd ../build_r
                 ../configure --with-msw --disable-shared --enable-monolithic
                 (此处去得了debug标志,则默认按Release版编译)
                 make
                 cp -R -u lib /d/wxlib
           四. 配置Dev-C++
            假设Dev-C++的安装目录为 d:/dev-cpp. 在 d:/dev-cpp/lib下新建一个目录 wx. 将我们备份目录(d:/wxlib)下所有的.a文件拷贝到这个目录下.  将wxWidgets解压缩目录下include目录下的wx文件夹全部拷贝到d:/dev-cpp/include下. 同时将d:/wxlib/wx/include下msw-ansi-debug-static-2.6 目录 和 msw-ansi-release-static-2.6 目录拷贝到 d:/dev-cpp/include/wx目录下. 
             下面我们要自己编辑一个wx专用的setup.h文件. 在d:/dev-cpp/include/wx下生成一个setup.h文件. 内容编辑如下:
 
#ifndef _SETUP_H_
#define _SETUP_H_
 
#      ifdef __WXDEBUG__
#              include "./msw-ansi-debug-static-2.6/wx/setup.h"
#      else
#              include "./msw-ansi-release-static-2.6/wx/setup.h"
#      endif
 
#endif
           五. 编辑dev-c++的工程模版文件.
           因为dev-c++目前不支持像MinGW Devoleper Studio那样可以配置Debug和Release模式,所以我们编辑两套模版. 一套用于Debug版,一套用于Release版.
            在dev-c++的安装目录下建立三个文件: wxWindow_Debug.template,wxWindow_Release.template, StdPrec.h(这是用来作预编译的头文件)
分别编辑文件如下
wxWindow_Debug.template
[Template]
ver=1
Name=wxWindows-Debug
Icon=wxWindow.ico
Description=wxWidgets development[Debug]
Catagory=GUI
 
[Unit0]
CppName=StdPrec.h
Cpp=StdPrec.h
 
[Project]
UnitCount=1
Type=0
Name=wxWindow
CppCompiler=-D_X86_=1 -DWIN32 -D_WIN32 -DWINVER=0x0400 -D__WIN95__ -D__GNUWIN32__ -D__WIN32__ -DSTRICT -D__WXMSW__ -D__WINDOWS__ -D__WXDEBUG__ -fpch-deps -g
Linker=-pipe  -Wl,--subsystem,windows -mwindows -lwx_mswd-2.6 -lwxregexd-2.6 -lwxpngd-2.6 -lwxjpegd-2.6 -lwxzlibd-2.6 -lwxtiffd-2.6 -lstdc++ -lgcc -lodbc32 -lwsock32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -lodbc32 -ladvapi32 -lodbc32 -lwsock32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid
(wxWindow.ico可以在wxWindow的解压缩目录下的Sample目录获得,然后拷贝到 template目录下即可)
wxWindow_Release.template
[Template]
ver=1
Name=wxWindows-Release
Icon=wxWindow.ico
Description=wxWidgets development[Release]
Catagory=GUI
 
[Project]
UnitCount=0
Type=0
Name=wxWindow
CppCompiler=-D_X86_=1 -DWIN32 -D_WIN32 -DWINVER=0x0400 -D__WIN95__ -D__GNUWIN32__ -D__WIN32__ -DSTRICT -D__WXMSW__ -D__WINDOWS__ -fpch-deps
Linker=-pipe  -Wl,--subsystem,windows -mwindows -lwx_msw-2.6 -lwxregex-2.6 -lwxpng-2.6 -lwxjpeg-2.6 -lwxzlib-2.6 -lwxtiff-2.6 -lstdc++ -lgcc -lodbc32 -lwsock32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -lodbc32 -ladvapi32 -lodbc32 -lwsock32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid 
StdPrec.h
#ifndef _STDPREC_H_INCLUDE
#define _STDPREC_H_INCLUDE
#include "wx/wxprec.h"
#ifdef __BORLANDC__
    #pragma hdrstop
#endif
// for all others, include the necessary headers (this file is usually all you
// need because it includes almost all "standard" wxWidgets headers)
#ifndef WX_PRECOMP
    #include "wx/wx.h"
#endif
#endif //_STDPREC_H_INCLUDE                    
             
        上面的两个模版中, Debug模式的模版会在工程新建时产生一个StdPrec.h的预编译头文件, 而在Release模式下则只会产生一个空工程.这主要是考虑到我们在开发时首先会用使用Debug模式开发,等调试完成后,我们在新建一个Release工程,然后将所有的程序文件加入到这个新建的工程中就可以了.
        现在启动 dev-c++(我使用的是中文环境), 在工具-编译选项中,选择 "库" 选项卡,将wx库的路径加入到库搜索路径中. 我机器为 d:/dev-cpp/lib/wx.
         
       现在我们可以开始试验了.
        我们新建一个测试目录. d:/sample/wx
       选"新建"->"工程",在出现的对话框中选择"GUI"这一页.选择wxWindow-Debug. 如果喜欢可以自己取一个工程名.这里就默认"工程1". 点击确定.
提示保存工程文件,将此文件保存到我们建的工程目录下. d:/sample/wx.
然后我们将新建一个main.cpp文件加入到工程中.输入如下代码:
(这段代码是从wx自带的sample/minimal例子中摘下来的)
#include "StdPrec.h"
 
class MyApp : public wxApp
{
public:
    virtual bool OnInit();
};
 
class MyFrame : public wxFrame
{
public:
    MyFrame(const wxString& title);
    void OnQuit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
private:
    DECLARE_EVENT_TABLE()
};
enum
{
    Minimal_Quit = wxID_EXIT,
    Minimal_About = wxID_ABOUT
};
 
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_MENU(Minimal_Quit,  MyFrame::OnQuit)
    EVT_MENU(Minimal_About, MyFrame::OnAbout)
END_EVENT_TABLE()
 
IMPLEMENT_APP(MyApp)
 
bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame(_T("Minimal wxWidgets App"));
    frame->Show(true);
    return true;
}
 
MyFrame::MyFrame(const wxString& title)
       : wxFrame(NULL, wxID_ANY, title)
{
#if wxUSE_MENUS
    wxMenu *fileMenu = new wxMenu;
    wxMenu *helpMenu = new wxMenu;
    helpMenu->Append(Minimal_About, _T("&About.../tF1"), _T("Show about dialog"));
    fileMenu->Append(Minimal_Quit, _T("E&xit/tAlt-X"), _T("Quit this program"));
    wxMenuBar *menuBar = new wxMenuBar();
    menuBar->Append(fileMenu, _T("&File"));
    menuBar->Append(helpMenu, _T("&Help"));
    SetMenuBar(menuBar);
#endif // wxUSE_MENUS
#if wxUSE_STATUSBAR
    CreateStatusBar(2);
    SetStatusText(_T("Welcome to wxWidgets!"));
#endif // wxUSE_STATUSBAR
}

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
    Close(true);
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
    wxString msg;
    msg.Printf( _T("This is the About dialog of the minimal sample./n")
                _T("Welcome to %s"), wxVERSION_STRING);
    wxMessageBox(msg, _T("About Minimal"), wxOK | wxICON_INFORMATION, this);
}
     保存这个main.cpp文件, 进行编译. 如果你在link时出现错误, 则有可能是dev-C++ 自带的lib库有问题. 我就遇见了这种情况. 让我郁闷了好半天.解决的办法很简单, 将MinGW5.0.2的库文件覆盖dev-c++自带的库文件即可.
即是将d:/MinGW/Lib下所有文件包括子目录覆盖 d:/dev-cpp/Lib目录. 此时再编译, 就OK了.

作者邮箱: lizw2006@126.com 欢迎来信讨论和指正.


          

没有更多推荐了,返回首页