Eclipse CDT中运行wxWidgets实战

搞java的对cpp不熟,折腾了好久终于跑起来了。。

首先去下载mingw-get-inst-20120426.exe,并安装到C:\MinGW

下载地址为:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/

(安装时勾选c++和mysys即可)


新建环境变更MINGW_HOME值为C:\MinGW

配置环境变量
变量名                                变量值
PATH                                  %MINGW_HOME%\bin;
LIBRARY_PATH                     %MINGW_HOME%\lib
C_INCLUDEDE_PATH              %MINGW_HOME%\include
CPLUS_INCLUDE_PATH           %MINGW_HOME%\lib\gcc\mingw32\4.6.2\include\c++;%MINGW_HOME%\lib\gcc\mingw32\4.6.2\include\c++\backward;%MINGW_HOME%\lib\gcc\mingw32\4.6.2\include

接下来


一路点下一步至完成。

新建一个source folder名为src,新建一个hello.cpp文件

得益于eclipse,你只需要输入
#in
ios
using
main
cout
自动补全,就会生成如下代码(我试了下强大的vs2008,怎么没有这些快捷键?)
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
    cout << "Hello";
    return 0;
}

接下来编译,控制台打出的命令如下
**** Internal Builder is used for build               ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o src\hello.o ..\src\hello.cpp
g++ -o test.exe src\hello.o
Build complete for project test
Time consumed: 1875  ms. 

运行,控制台打出的命令如下
Hello

清除,控制台打出的命令如下
**** Clean-only build of configuration Debug for project test ****
rm -rf test.exe src/hello.o src/hello.d
Build complete for project test

接下来就是跑该死的wx了。

首先下载wxMSW-2.8.12-Setup.exe,安装在C:\wxWidgets-2.8.12目录下

http://www.wxwidgets.org/downloads/

装好后多出如下菜单

在mingw shell中进入到安装目录,。参考其它博文编译。。。
(
参考:http://lvstone.blog.163.com/blog/static/17736015120112114511127/
参考:http://max.berger.name/howto/wxWidgets/wxWidgets_MinGW.jsp
参考:http://max.berger.name/howto/wxWidgets/wxWidgets_Eclipse.jsp
参考:http://www.cnblogs.com/waynecheng/archive/2012/04/18/2455765.html
应该只需要从mingw shell中进入C:\wxWidgets-2.8.12然后依次执行如下命令就行了
./configure
make

 或者
进入C:\wxWidgets-2.8.12\build\msw,执行
make -f makefile.gcc BUILD=debug UNICODE=1

(不知道以上两种方式有无区别)

完事后会生成
C:\wxWidgets-2.8.12\lib\gcc_lib
C:\wxWidgets-2.8.12\build\msw\gcc_mswud

这样的目录。。如果是用vc2008编译,则生成的文件就不在gcc*下面,而是vc**啥的,

装好后,设置环境变量WX值为C:\wxWidgets-2.8.12

在mingw shell(注意不是ms dos)下

这两个命令的返回值一会在CDT中编译cpp时会用到。。

(在ubuntu下也会用到这两个值,不过是这样用的

g++ -o simple simple.cpp \
 `wx-config --cxxflags --libs`

以上的命令有点看不懂,查了一下shell会先执行`倒引号中的命令。。

注意需要将mingw shell中的路径稍做整理,变成正常的windows下的路径,如下:
$ .\wx-config --cxxflags
-Ic:\wxWidgets-2.8.12\lib\wx\include\msw-unicode-release-static-2.8 -Ic:\wxWidgets-2.8.12\include -Ic:\wxWidgets-2.8.12\contrib\include -D__WXMSW__


$ .\wx-config --libs
-Lc:\wxWidgets-2.8.12\lib   -Wl,--subsystem,windows -mwindows c:\wxWidgets-2.8.12\lib\libwx_mswu-2.8.a -lwxregexu-2.8 -lwxexpat-2.8 -lwxtiff-2.8 -lwxjpeg-2.8 -lwxpng-2.8 -lwxzlib-2.8 -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32

接下来,把刚才的hello.cpp干掉,新建一个Simple.cpp,代码如下:

01 #include <wx/wx.h>
02  
03 class Simple: public wxFrame {
04 public:
05     Simple(const wxString& title);
06 };
07  
08 class MyApp: public wxApp {
09 public:
10     virtual bool OnInit();
11 };
12  
13 Simple::Simple(const wxString& title) :
14         wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150)) {
15     Centre();
16 }
17  
18 IMPLEMENT_APP (MyApp)
19  
20 bool MyApp::OnInit() {
21     Simple *simple = new Simple(wxT("Simple"));
22     simple->Show(true);
23     return true;
24 }

如下:

可以看到有一堆错误,首先解决include wx/wx.h不识别的问题。

工程名上右键属性,找到如下内容,并将wx-config --cxxflags返回值中的-I部分加进去

保存后,错误没了,而且可以通过ctrl+鼠标左键,点开wx/wx.h

接下来,编译,,那是一堆错误:
**** Internal Builder is used for build               ****
g++ -Ic:\wxWidgets-2.8.12\lib\wx\include\msw-unicode-release-static-2.8 -Ic:\wxWidgets-2.8.12\include -Ic:\wxWidgets-2.8.12\contrib\include -O0 -g3 -Wall -c -fmessage-length=0 -o src\Simple.o ..\src\Simple.cpp
g++ -o test.exe src\Simple.o
src\Simple.o: In function `Simple':
D:\workspaces\cpp\test\Debug/../src/Simple.cpp:14: undefined reference to `wxFrameNameStr'
D:\workspaces\cpp\test\Debug/../src/Simple.cpp:14: undefined reference to `wxDefaultPosition'

接下来把wx-config --libs的返回值加入到下图中的位置。。

保存,还是上面的错误:
**** Internal Builder is used for build               ****
g++ -Ic:\wxWidgets-2.8.12\lib\wx\include\msw-unicode-release-static-2.8 -Ic:\wxWidgets-2.8.12\include -Ic:\wxWidgets-2.8.12\contrib\include -O0 -g3 -Wall -c -fmessage-length=0 -o src\Simple.o ..\src\Simple.cpp
g++ -Lc:\wxWidgets-2.8.12\lib -Wl,--subsystem,windows -mwindows c:\wxWidgets-2.8.12\lib\libwx_mswu-2.8.a -lwxregexu-2.8 -lwxexpat-2.8 -lwxtiff-2.8 -lwxjpeg-2.8 -lwxpng-2.8 -lwxzlib-2.8 -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32 -o test.exe src\Simple.o
src\Simple.o: In function `Simple':
D:\workspaces\cpp\test\Debug/../src/Simple.cpp:14: undefined reference to `wxFrameNameStr'


接下来找到如下部分

将${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
改成
${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}

再次编译
**** Internal Builder is used for build               ****
g++ -o test.exe src\Simple.o -Lc:\wxWidgets-2.8.12\lib -Wl,--subsystem,windows -mwindows c:\wxWidgets-2.8.12\lib\libwx_mswu-2.8.a -lwxregexu-2.8 -lwxexpat-2.8 -lwxtiff-2.8 -lwxjpeg-2.8 -lwxpng-2.8 -lwxzlib-2.8 -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32
Build complete for project test
Time consumed: 2203  ms. 

运行,终于,传说中的窗口出现了。。

原文地址:https://www.cnblogs.com/shihao/p/2914253.html