博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Visual Studio 2015编译wxWidgets
阅读量:6906 次
发布时间:2019-06-27

本文共 4229 字,大约阅读时间需要 14 分钟。

 

宫指导说,换帅如换刀

程序员的编译器一换,基本套路必须都重练几次

使用wxWidgets并不难,但不能使用现有的库和工程配置文件,细节就必须理清楚

 

获取wxWidgets

官方的页面,下7z或zip文件均可

文件“wxWidgets根目录/docs/msw/install.txt”是编译说明文档,可以作为参考

添加环境变量WXWIN,值是wxWidgets根目录的路径。虽然不添加变量也可以编译,但很多wxWidgets插件的编译都依赖这个环境变量,因此最好加上。

wxWidgets根目录的路径不要含有空格

 

增加vs2015支持

vs2015影响编译的改动,主要是定义了snprintf,以及编译器版本升级到14。

需要对wxWidgets作如下修改,才能使用vs2015进行编译。

 

%WXWIN%\include\msvc\wx\setup.h,66行,增加版本支持

#elif _MSC_VER == 1900        #define wxCOMPILER_PREFIX vc140

 

%WXWIN%\include\wx\compiler.h,56行,增加版本支持

#elif __VISUALC__ < 2000    #define __VISUALC14__

 

在下面三个文件中,找到snprintf的宏定义,注释掉

  •   %WXWIN%\src\tiff\libtiff\tif_config.h
  •   %WXWIN%\src\tiff\libtiff\tif_config.vc.h
  •   %WXWIN%\src\zlib\gzguts.h

 

编译库文件

运行“开始|所有程序|visual studio 2015|visual studio tools|VS2015 开发人员命令提示”

切换到%WXWIN%\build\msw

32位静态库DEBUG版

nmake /f makefile.vc

库文件生成在%WXWIN%\lib\vc_lib,文件名含d表示debug版

 

32位静态库RELEASE版

nmake /f makefile.vc BUILD=release

库文件生成在%WXWIN%\lib\vc_lib,文件名不含d与debug版区分

 

32位动态库DEBUG版

nmake /f makefile.vc SHARED=1

库文件生成在%WXWIN%\lib\vc_dll,文件名含d表示debug版

 

32位动态库RELEASE版

nmake /f makefile.vc BUILD=release SHARED=1

库文件生成在%WXWIN%\lib\vc_dll,文件名不含d与debug版区分

 

运行“开始|所有程序|visual studio 2015|visual studio tools|Windows Desktop Command Prompts|VS2015 x64 本机工具命令提示符”

切换到%WXWIN%\build\msw

64位静态库DEBUG版

nmake /f makefile.vc TARGET_CPU=X64

库文件生成在%WXWIN%\lib\vc_x64_lib,文件名含d表示debug版

 

64位静态库RELEASE版

nmake /f makefile.vc BUILD=release TARGET_CPU=X64

库文件生成在%WXWIN%\lib\vc_x64_lib,文件名不含d与debug版区分

 

64位动态库DEBUG版

nmake /f makefile.vc SHARED=1 TARGET_CPU=X64

库文件生成在%WXWIN%\lib\vc_x64_dll,文件名含d表示debug版

 

64位动态库RELEASE版

nmake /f makefile.vc BUILD=release SHARED=1 TARGET_CPU=X64

库文件生成在%WXWIN%\lib\vc_x64_dll,文件名不含d与debug版区分

 

“Hello world”之

官方源码

// wxWidgets "Hello world" Program// For compilers that support precompilation, includes "wx/wx.h".#include 
#ifndef WX_PRECOMP#include
#endifclass MyApp : public wxApp{public: virtual bool OnInit();};class MyFrame : public wxFrame{public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);private: void OnHello(wxCommandEvent& event); void OnExit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); wxDECLARE_EVENT_TABLE();};enum{ ID_Hello = 1};wxBEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Hello, MyFrame::OnHello) EVT_MENU(wxID_EXIT, MyFrame::OnExit) EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) wxEND_EVENT_TABLE()wxIMPLEMENT_APP(MyApp);bool MyApp::OnInit(){ MyFrame *frame = new MyFrame("Hello World", wxPoint(50, 50), wxSize(450, 340)); frame->Show(true); return true;}MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, wxID_ANY, title, pos, size){ wxMenu *menuFile = new wxMenu; menuFile->Append(ID_Hello, "&Hello...\tCtrl-H", "Help string shown in status bar for this menu item"); menuFile->AppendSeparator(); menuFile->Append(wxID_EXIT); wxMenu *menuHelp = new wxMenu; menuHelp->Append(wxID_ABOUT); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append(menuFile, "&File"); menuBar->Append(menuHelp, "&Help"); SetMenuBar(menuBar); CreateStatusBar(); SetStatusText("Welcome to wxWidgets!");}void MyFrame::OnExit(wxCommandEvent& event){ Close(true);}void MyFrame::OnAbout(wxCommandEvent& event){ wxMessageBox("This is a wxWidgets' Hello world sample", "About Hello World", wxOK | wxICON_INFORMATION);}void MyFrame::OnHello(wxCommandEvent& event){ wxLogMessage("Hello world from wxWidgets!");}

 

静态库DEBUG方案的编译

“工程属性|C/C++|常规|附加包含目录”,添加

%WXWIN%\include

“工程属性|链接器|常规|附加库目录”,添加

%WXWIN%\lib\vc_lib

“工程属性|链接器|输入|附加依赖项”,添加

wxbase30ud.libwxbase30ud_net.libwxbase30ud_xml.libwxexpatd.libwxjpegd.libwxmsw30ud_adv.libwxmsw30ud_aui.libwxmsw30ud_core.libwxmsw30ud_gl.libwxmsw30ud_html.libwxmsw30ud_media.libwxmsw30ud_propgrid.libwxmsw30ud_qa.libwxmsw30ud_ribbon.libwxmsw30ud_richtext.libwxmsw30ud_stc.libwxmsw30ud_webview.libwxmsw30ud_xrc.libwxpngd.libwxregexud.libwxscintillad.libwxtiffd.libwxzlibd.libwinmm.libcomctl32.librpcrt4.libwsock32.libwininet.lib

推荐用这种方式添加依赖项,而不写#pragmma comment,方便切换不同方案,代码也美观

最后5个依赖项并不属于wxWidgets,别漏了

 

编译运行,成功~

 

静态库RELEASE方案的编译

附加库目录的路径不同,要修改

依赖库的名字不同,把d去掉

 

动态库方案的编译

“工程属性|C/C++|预处理器|预处理器定义”,添加

WXUSINGDLL

 

转载地址:http://psgdl.baihongyu.com/

你可能感兴趣的文章
放弃OpenStack?恐怕还不到时候
查看>>
Kubernetes上的十大应用程序
查看>>
QASymphony发布新的中心化自动测试及行为驱动测试产品
查看>>
罗辑思维首席架构师:Go微服务改造实践
查看>>
零售业就是不断贴近用户” 腾讯智慧零售以消费者为核心推动数字化转型
查看>>
阿里程序员工作小技巧:理解CPU分支预测,提高代码效率
查看>>
反应式服务的性能应该如何测试?
查看>>
Timehop为什么使用Go替代Rails
查看>>
Android之JSON格式数据解析
查看>>
HTTPS简单学习
查看>>
IOS博客项目搭建-23-SQLite数据库学习
查看>>
使用 ajaxFileUpload 进行图片上传
查看>>
groovy脚本
查看>>
Android安全开发之Provider组件安全
查看>>
ECMAScript6 新特性——“函数的扩展”
查看>>
CentOS7之Scrapy爬虫部署
查看>>
深入浅出JavaScript:作用域
查看>>
3Sum Closest
查看>>
在全屏滚动页面下实现鼠标滚轮的子级交互
查看>>
GLG Widgets v3.5新增数据过滤器【附下载】
查看>>