• wxWidgets 的 Linux / Windows 混合开发环境


    目标

    建立一个开发 GUI 交互界面程序的环境,要求:

    1. 以 C/C++ 为主要程序设计语言。

    2. 最好能充分利用已有的 MFC 开发经验。

    3. 以 Linux 为主要开发环境。可以在 Windows 中编译并发布程序。

    根据以上要求选择:

    Archlinux / Windows XP

    CodeBlocks + wxWidgets

    在 Archlinux 中使用 CodeBlocks + wxWidgets 比较简单,此文中不再赘述。

    Windows XP 运行在 Virtualbox 中,因此编译器选用无 IDE 的 VC2010 精简版,仅使用 NMAKE 命令行编译,无需MFC、ATL、Platform SDK等。

    下文中如无特别声明,均在 Windows XP 中操作。


    安装目录

    VC2010 安装在 Windows XP 的C盘根目录。文件夹名为:C:VC2010

    wxWidgets 解压缩到 Linux 与 Windows 的共享文件夹中。例如:

    Linux 目录为 /mnt/sda2/wxWidgets

    Windows 目录为 e:mntsda2wxWidgets,下文用nmake宏变量$(WX_ROOT)代表。

    备注:

    可以把 VC2010 也许放在共享文件夹,wxWidgets 放在 VC2010 文件夹下。


    设置 VC2010

    建立批处理文件 C:VC2010VC2010.bat

    @echo                VC 2010 编译器
    @echo    --------------------------------------
    @echo         CL.exe 控制 Microsoft C 和 C++
    @echo                 编译器与链接器
    @echo    --------------------------------------
    @echo  LINK 是将通用对象文件格式 (COFF) 对象文件和
    @echo  库链接起来以创建 32 位可执行 (.exe) 文件或
    @echo          动态链接库 (DLL) 的 32 位工具。
    @echo    --------------------------------------
    @echo                rc 是资源编译
    @echo    --------------------------------------
    
    @echo off
    
    set PATH=%CD%in;%PATH%
    set INCLUDE=%CD%include
    set LIB=%CD%lib
    
    rem color 0e
    title VC2010 x86 命令提示
    "%comspec%"
    

    建立快捷方式 C:VC2010VC2010.lnk

    修改 VC2010.lnk 的属性。

    快捷方式页将目标设置为:%comspec% /k "VC2010.bat"

    布局页将屏幕缓冲区大小窗口大小宽度设置为:132。窗口大小的高度设置为:43。

    运行 C:VC2010VC2010.lnk,在 CMD 窗口中输入命令nmake并回车。如果可以运行,说明设置正确。


    设置编译 wxWidgets

    运行C:VC2010VC2010.lnk,打开命令行窗口。

    进入 wxwidgets 的编译目录$(WX_ROOT)uildmsw

    E:
    cd sda2wxWidgetsuildmsw
    

    清理原来的目标文件:

    nmake -f makefile.vc clean
    

    修改 wxWidgets 编译选项 $(WX_ROOT)uildmswconfig.vc,获得最小体积的EXE执行文件:

    参考 wxWidgets 2.9.2svn(3.x)最小体积编译方法

    CPPFLAGS = /Os
    LDFLAGS = /MANIFEST:NO /OPT:REF /OPT:ICF
    BUILD = release
    SHARED=0
    UNICODE=1
    DEBUG_INFO=0
    DEBUG_FLAG=0
    MONOLITHIC=0
    OFFICIAL_BUILD=1
    RUNTIME_LIBS=static
    

    执行编译:

    nmake -f makefile.vc clean
    

    编译过程结束后,在 $(WX_ROOTuildmswvc_mswu) 目录中留下了约 500M 的 obj 文件。可以直接删除 vc_mswu 目录。

    编译示例程序。进入 listctl 所在的目录$(WX_ROOT)samplelistctl

    cd ....samplelistctl
    nmake -f makefile.vc clean
    nmake -f makefile.vc
    

    如果一切正常,在子目录 listctlvc_mswu 中将产生约 1.7M 大小的可执行文件 listctl.exe。

    用 UPX 压缩可执行文件。安装 UPXSHELL 或者 UPX Easy GUI,可以将 listctl.exe 压缩到 700K 左右。这已经接近 VC / MFC 程序的大小了。


    脱离 wxWidgets 的 samples 目录用 nmake 单独编译示例程序 listctl

    用 nmake 编译 listctl 的关键是建立 makefile.vc 文件,但 wxwidgets 示例程序的 makefile.vc 使用的是相对路径,因此需要我们做一些修改。

    先将 listctl 文件夹拷贝到 wxWidgets 以外的其它目录中。

    修改 VC2010.bat 批处理命令。增加设置 WX_ROOT 环境变量。

    set WX_ROOT=e:sda2wxWidgets
    

    修改 listctl 文件夹中的 makefile.vc:

    • $(WX_ROOT) 代替 .....

    • $(WX_ROOT) 代替 ../..

    $(WX_ROOT)samples 下面的三个文件:

    • sample.rc
    • sample.ico
    • sample.xpm

    拷贝到 listctl 的 上一级目录 。如此可在 listctl 目录 运行 nmake -f makefile.vc 编译出可执行文件。


    Tips

    在 windows 中编译 wxAboutBox

    这是属于 wxAdvanced 库的,一般情况下,编译时没有链接该库。

    修改 makefile.vc 增加一下内容:

    !if "$(MONOLITHIC)" == "0"
    __WXLIB_ADV_p = 
    	wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib
    !endif
    

    新增链接库:$(__WXLIB_ADV_p)

    在 linux codeblocks 环境下编译 wxAui

    增加 /usr/lib/libwx_gtk2u_aui-3.0.so 到链接库中。

    WXUNUSED 的用途

    在 windows vc2010 环境下编译时,如果函数未使用某个参数时,编译程序报错:

    warning C4100: 'event' : unreferenced formal parameter

    原来的程序:

    void LogMonFrame::OnQuit(wxCommandEvent& event)
    {
        Destroy();
    }
    

    改成:

    void LogMonFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
    {
        Destroy();
    }
    

    即可。
    即将

    void LogMonFrame::OnQuit(wxCommandEvent& event)

    改成

    void LogMonFrame::OnQuit(wxCommandEvent&)

  • 相关阅读:
    Codeforces Round #325 (Div. 2) F:(meet in the middle)
    Educational Codeforces Round 3:E (MST+树链剖分+RMQ)
    Educational Codeforces Round 3:D. Gadgets for dollars and pounds(二分答案+贪心)
    CodeForce 484B:(最大余数)
    CodeForce 540C:(DFS)
    HDU 1010:(DFS)
    Poj1741-Tree(树分治)
    uva10245-The Closest Pair Problem(平面上的点分治)
    hdu1561-The more, The Better(树形dp)
    hdu2196-Computer(树形dp)
  • 原文地址:https://www.cnblogs.com/ccpaging/p/4037183.html
Copyright © 2020-2023  润新知