目标

建立一个开发 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:\mnt\sda2\wxWidgets,下文用nmake宏变量$(WX_ROOT)代表。

备注:

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


设置 VC2010

建立批处理文件 C:\VC2010\VC2010.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%\bin;%PATH%
set INCLUDE=%CD%\include
set LIB=%CD%\lib rem color 0e
title VC2010 x86 命令提示
"%comspec%"

建立快捷方式 C:\VC2010\VC2010.lnk

修改 VC2010.lnk 的属性。

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

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

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


设置编译 wxWidgets

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

进入 wxwidgets 的编译目录$(WX_ROOT)\build\msw

E:
cd \sda2\wxWidgets\build\msw

清理原来的目标文件:

nmake -f makefile.vc clean

修改 wxWidgets 编译选项 $(WX_ROOT)\build\msw\config.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_ROOT\build\msw\vc_mswu) 目录中留下了约 500M 的 obj 文件。可以直接删除 vc_mswu 目录。

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

cd ..\..\sample\listctl
nmake -f makefile.vc clean
nmake -f makefile.vc

如果一切正常,在子目录 listctl\vc_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:\sda2\wxWidgets

修改 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&)

wxWidgets 的 Linux / Windows 混合开发环境的更多相关文章

  1. 将linux用在开发环境中

    我是如何将linux用在开发环境中的 1.为什么不直接安装Linux在主机 一直想深入学习一下linux的使用,于是将家里的笔记本装了linux系统,但是要将自己的系统打造一个适合开发的环境确实是一件 ...

  2. 如何将linux用在开发环境中的

    如何将linux用在开发环境中的 1.我为什么要写这篇文章 一直想深入学习一下linux的使用,于是将家里的笔记本装了linux系统,但是要将自己的系统打造一个适合开发的环境确实是一件费心费力的事,而 ...

  3. linux搭建C开发环境

    目前决大多 数的Linux用户对Linux的了解还处于比较低级的层次,他们可能会几条命令.会配几种服务.会用rpm来安装软件.会操作KDE/Gnome界机等等,但是当他们遇到一些需要编译安装的软件时, ...

  4. 搭建Linux C语言开发环境

    1.操作系统 Windows操作系统:windows 7 and windows 10 2.开发工具和编译工具 开发工具:notpad++ 和 vim 编译工具:Cygwin64 Terminal 3 ...

  5. Linux设备驱动开发环境的搭建(转)

    经过两周的摸索,终于对Linux设备驱动开发有了个初步的认识,下面对Linux设备驱动开发环境的搭建做个小结,以方便自己以后查询,同时也能给同道的初学者一点帮助. 刚接触Linux设备驱动时,初学者往 ...

  6. Unix/Linux环境C编程新手教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRjYXN0Y3Bw/font/5a6L5L2T/font ...

  7. Unix/Linux环境C编程入门教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. 2.选择默认虚拟机 3.选择稍后安装操作系统 4.选择linux  opensuse 5. 选择默认虚拟机名称 6.设置处理器为双核. 7.内存设置为2 ...

  8. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  9. windows phone7开发环境配置错误

    遇到下面这样一个问题:在配置windows phoe7开发环境的时候出现如下错误,以及相应的解决方案,希望对大家有所帮助. 装完环境后出现下面错误: [caption id="attachm ...

随机推荐

  1. WPF DataPager控件

    最近在项目中遇到远程加载数据的问题,由于服务器采用分页方式返回数据,因此客户端也相应的制作了一个分页控件.代码相对简单,算做入门级的源码. 效果如图: 初步分析,分页功能只需要3个核心变量:PageI ...

  2. CMD修改IP地址

    在操作系统下,我们可以使用"本地连接"的属性来修改IP地址,但是如果我们要在多个IP地址之间切换,使用这种方法未免过于麻烦.我们可以使用NETSH命令来添加,相当简便.使用DOS修 ...

  3. WPF开发进阶 - Fody/PropertyChanged(二)

    前一篇 简单的介绍了Fody/PropertyChanged的使用方法, 这一篇,我们详细介绍它的一些比较重要的特性和规则 1. Attributes 通过在类或属性上标记这些特性,可以在编译代码时, ...

  4. EF6多线程与分库架构设计之Repository

    1.项目背景 这里简单介绍一下项目需求背景,之前公司的项目基于EF++Repository+UnitOfWork的框架设计的,其中涉及到的技术有RabbitMq消息队列,Autofac依赖注入等常用的 ...

  5. Linux如何创建一个进程

    关于准备知识: 每个进程都有以下属性: 1  地址空间 每个进程都有自己的进程地址空间,格式大概是这个样子: 栈(Stack)以帧为单位,当程序调用函数(假如该函数名为fun01)时,stack会向下 ...

  6. 谈谈getElementsByClassName()

    HTML5中新增的一个方法getElementsByClassName(),但是并非所有浏览器有支持 因此我们构造一个方法兼容这个方法 <script type="text/javas ...

  7. CentOS7 设置局域网固定IP

    题记: 在局域网内PC通常都是采用自动获取IP的方式从路由器拿到局域网IP的,每次PC启动后分配到的局域网IP都不一定相同.但是出于某些特殊的需求,例如要在局域网内做端口映射,需要将PC设置成使用固定 ...

  8. mybatis关联查询,查询结果多条,却只返回一条记录

    原因是:主表和子表的主键字段相同,可以使用别名!这是因为mybatis的内部实现机制决定的: MyBatis为了降低内存开销,采用ResultHandler逐行读取的JDBC ResultSet结果集 ...

  9. 搭建Eclipse开发和调试环境(真机)

    由于工作原因,最近开始了Android开发.之前接触过一段时间Android,还是在2.x时代. 那个时候搭建开发环境还是挺麻烦的.又是Eclipse,又是ADT的,不同的版本还要安装对应开发包.现在 ...

  10. 使用Dom解析器,操作XML里面的信息

    import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;impo ...