Eclipse CDT中運行wxWidgets實戰

搞java的對cpp不熟,折騰了很久終於跑起來了。。 html

首先去下載mingw-get-inst-20120426.exe,並安裝到C:\MinGW java

下載地址爲:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/
(20130831更新,這裏去下載離線的包!http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/) ios

(安裝時勾選c++和mysys便可)
c++


新建環境變動MINGW_HOME值爲C:\MinGW shell

配置環境變量
變量名                                變量值
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 ubuntu

接下來


一路點下一步至完成。 windows

新建一個source folder名爲src,新建一個hello.cpp文件 api

得益於eclipse,你只須要輸入
#in
ios
using
main
cout
自動補全,就會生成以下代碼(我試了下強大的vs2008,怎麼沒有這些快捷鍵?)
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
    cout << "Hello";
    return 0;
} eclipse

接下來編譯,控制檯打出的命令以下
**** 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.  jsp

運行,控制檯打出的命令以下
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,代碼以下:

#include <wx/wx.h>

class Simple: public wxFrame {
public:
	Simple(const wxString& title);
};

class MyApp: public wxApp {
public:
	virtual bool OnInit();
};

Simple::Simple(const wxString& title) :
		wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150)) {
	Centre();
}

IMPLEMENT_APP (MyApp)

bool MyApp::OnInit() {
	Simple *simple = new Simple(wxT("Simple"));
	simple->Show(true);
	return true;
}
以下:

能夠看到有一堆錯誤,首先解決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. 

運行,終於,傳說中的窗口出現了。。

相關文章
相關標籤/搜索