真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++到Qt編譯過程方法

C++ 到 Qt

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的樂陵網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

Qt 是 C++ 的庫,Qt在ansi C++ 的基礎(chǔ)上進(jìn)行了一點(diǎn)擴(kuò)展。

但國內(nèi)似乎比較浮躁,學(xué)Qt的很多連基本的C++如何編譯似乎都不太清楚。本文舍棄IDE或qmake、cmake等工具的束縛,嘗試通過幾個(gè)例子,一步一步從標(biāo)準(zhǔn) C++ 的編譯過渡到 Qt 的編譯。

本文涉及的都是最基本的東西,或許可以說,只要你用C++ Qt,不管是通過哪種工具(qmake、cmake、boost.build、qtcreator、vs2008、Eclipse、...),本文的內(nèi)容都是需要理解的(盡管真正寫程序時(shí),我們都不會(huì)直接用C++編譯器來編譯Qt程序)。

如果你對命令行比較恐懼.

例子一:簡單的控制臺程序
一個(gè)很簡單的例子,沒用到Qt擴(kuò)展:(也就是說,這是一個(gè)普通的C++程序)

#include #include int main(int argc, char** argv){ QCoreApplication app(argc, argv); qDebug()<<"hello qt!"; app.exec();}[喝小酒的網(wǎng)摘]http://blog.hehehehehe.cn/a/4033.htm
我們都知道,編譯一個(gè)C++的程序,無非是 編譯預(yù)處理,編譯、鏈接

編譯預(yù)處理器:頭文件路徑 和 必要的宏

編譯器:一些編譯參數(shù)

鏈接器:一些鏈接參數(shù) 和 要鏈接的庫

g++
簡單一行命令,即可生成 main.exe (linux下,則生成可執(zhí)行程序 main)

g++ main.cpp -DQT_CORE_LIB -Ie:Qt4.7.0include -o main -Le:Qt4.7.0lib -lQtCore4
單行命令,很簡單:

-I 指定頭文件路徑

-L 指定庫文件路徑

-l 指定需要鏈接的庫

-D 定義必要的宏(其實(shí)對這個(gè)小程序,這個(gè)宏也沒必要用)

-o 指定生成的可執(zhí)行文件名

cl
簡單一行命令,即可生成 main.exe

cl main.cpp -ID:/Qt/4.7.0/include -DQT_CORE_LIB -Femain -link -LIBPATH:D:/Qt/4.7.0/lib QtCore4.lib
依然很簡單

-I 頭文件路徑

-D 定義必要的宏

-Fe 指定可執(zhí)行程序文件名

-link 后面是鏈接器參數(shù)

-LIBPATH 庫文件路徑

例子二:簡單的GUI程序
這次稍微復(fù)雜一點(diǎn),不是單一的控制臺程序,而是一個(gè)簡單的GUI程序

main.cpp

#include #include "widget.h"int main(int argc, char** argv){ QApplication app(argc, argv); Widget w; w.show(); return app.exec();}
widget.h

#include class Widget : public QWidget{public: Widget(QWidget * parent=NULL);};
widget.cpp

#include "widget.h"Widget::Widget(QWidget * parent) :QWidget(parent){}
同樣,這個(gè)程序未使用Qt的擴(kuò)展,直接用C++的編譯器編譯:

g++
g++ main.cpp widget.cpp -DQT_CORE_LIB -DQT_GUI_LIB -Ie:Qt4.7.0-beta2include -o main -Le:Qt4.7.0-beta2lib -lQtCore4 -lQtGui4
因?yàn)槲覀兪褂昧薗tGui模塊,所以和前面相比:

增加了 -DQT_GUI_LIB 和 -lQtGui4

多了一個(gè)文件 widget.cpp

注意: Windows下

如果在非windows平臺下,這條命令就可以了。但windows下,你知道的:分console和windows兩個(gè)鏈接子系統(tǒng),而且入口函數(shù)分 main 和 WinMain 。

這條命令,編譯出的 main.exe 會(huì)彈出控制臺。要想不要控制臺,則使用下面的命令:

g++ main.cpp widget.cpp -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NEEDS_QMAIN -Ie:Qt4.7.0-beta2include -o main -Le:Qt4.7.0-beta2lib -lQtCore4 -lQtGui4 -lqtmain -Wl,-subsystem,windows
多了兩個(gè)選項(xiàng):

qtmain 該庫中一個(gè)WinMain 函數(shù),它會(huì)調(diào)用我們的代碼的main函數(shù)。即對編譯器來說:入口函數(shù)的名字變了

-Wl,-subsystem,windows 你知道的,鏈接windows子系統(tǒng)

對與MinGW來說,此處多了一個(gè)宏 QT_NEEDS_QMAIN,這個(gè)東西很有意思。在Qt Windows下鏈接子系統(tǒng)與入口函數(shù)(終結(jié)版) 中我們詳細(xì)提到了這個(gè)。(在此處,不過你可以忽略它,不會(huì)出錯(cuò),而且也不會(huì)有可感覺到的差異)

cl
同windows下的g++基本一樣,帶控制臺:

cl main.cpp widget.cpp -ID:/Qt/4.7.0/include -DQT_CORE_LIB -DQT_GUI_LIB -Femain -link -LIBPATH:D:/Qt/4.7.0/lib QtCore4.lib QtGui4.lib
不帶控制臺:

cl main.cpp widget.cpp -ID:/Qt/4.7.0/include -DQT_CORE_LIB -DQT_GUI_LIB -Femain /MD -link -LIBPATH:D:/Qt/4.7.0/lib -subsystem:windows qtmain.lib QtCore4.lib QtGui4.lib
分析同上:指定鏈接子系統(tǒng),啟用WinMain入口函數(shù)

多文件的程序如何管理
直接調(diào)用編譯器有什么壞處呢?

參數(shù)多啊,每次手動(dòng)輸入,難免出錯(cuò)。(例子中我們用的參數(shù)已經(jīng)盡可能少了,可能都還是讓你眼暈了)。

其次呢,很重要的一點(diǎn),每次只要一個(gè)文件修改,所有東西都要重新編譯。

改變這種狀況的辦法,傳統(tǒng)的就是寫 Makefile,然后編譯時(shí)只需要輸入 make 就行了,他會(huì)判斷哪些文件被改動(dòng)需要重新編譯。

另外就是VS等一些IDE自己提供的功能。下面簡單看一下本例子對應(yīng)makefile文件:

mingw32-make的Makefile文件

CPPFLAGS = -DQT_CORE_LIB -DQT_GUI_LIB -Ie:Qt4.7.0include
LDFLAGS = -Le:Qt4.7.0lib -lQtCore4 -lQtGui4 -lqtmain -Wl,-subsystem,windows

objects = main.o widget.o
dest = main

$(dest) : $(objects)
g++ -o $@ $(objects) $(LDFLAGS)
nmake的Makefile文件

CPPFLAGS = -ID:/Qt/4.7.0/include -DQT_CORE_LIB -DQT_GUI_LIB -MD
LDFLAGS = -LIBPATH:D:/Qt/4.7.0/lib -subsystem:windows qtmain.lib QtCore4.lib QtGui4.lib
objects = main.obj widget.obj
dest = main.exe
$(dest) : $(objects)
link $(objects) $(LDFLAGS)
對此不做介紹,因?yàn)镸akefile編寫也是一門學(xué)問。相當(dāng)難寫,所有才有qmake、cmake這些工具來幫我們生成Makefile文件

例子三:引入moc
Qt 對 C++ 的擴(kuò)展主要是3個(gè)方面:

元對象系統(tǒng),包含Q_OBJECT宏的文件(.h, .cpp等)需要 moc 預(yù)處理

資源系統(tǒng),.qrc 文件 需要 rcc 進(jìn)行預(yù)處理

界面系統(tǒng),.ui 文件 需要 uic 進(jìn)行預(yù)處理


分享標(biāo)題:C++到Qt編譯過程方法
瀏覽地址:http://weahome.cn/article/gojocj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部