中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

QT 5.7   pro 設置詳解

發布時間:2020-06-29 08:41:01 來源:網絡 閱讀:3004 作者:WZM3558862 欄目:系統運維

工作中,感覺pro文件的有些內容真不太懂,現系統性的學習一下。于此備錄,分享共勉。

為了更好的理解,先創建一個簡單的工程作為實踐。

【1】創建一個pro文件

1.1 新建proDemo工程。步驟如下:Qt Creator--->New Project--->應用程序--->Qt Widgets Application--->名稱為:proDemo(創建路徑自己擬定,本地為F:\Source\proStudy)--->類信息保持不變--->完成

1.2 提取pro文件。在工程目錄下,把名稱為proDemo且類型為pro的文件找到,內容如下所示:

QT 5.7     pro  設置詳解

不懂?呵呵~ 我也不懂,先學習一下,pro文件分析如下:

QT 5.7     pro  設置詳解

【2】模板變量

2.1 模板變量 TEMPLATE

模板變量作用告訴qmake為這個應用程序具體生成哪種makefile。下面是模板變量可供選擇的值:

[1]app 模板變量的默認值。建立一個應用程序的makefile。

[2]lib 建立一個庫的makefile。

[3]vcapp 建立一個應用程序的Visual Studio項目文件。

[4]vclib 建立一個庫的VisualStudio項目文件。

[5]subdirs 這是一個特殊的模板,它可以創建一個能夠進入特定目錄且為一個項目文件生成makefile,還能為它再調用make的makefile。

由以上分析可知,模板變量值不同,生成的makefile文件也會隨之改變。那么,默認的同時是最常用的app值,模板請參見下文。

2.2 app模板

  app模板告訴qmake為建立一個應用程序生成一個makefile。

當使用這個模板時,設置下面這些qmake系統變量值是有效的。可以在你的.pro文件中使用它們為你的應用程序指定特定信息。

  • HEADERS - 應用程序中的所有頭文件的列表。

  • SOURCES - 應用程序中的所有源文件的列表。

  • FORMS - 應用程序中的所有.ui文件(由Qt設計器生成)的列表。

  • LEXSOURCES - 應用程序中的所有lex源文件的列表。

  • YACCSOURCES - 應用程序中的所有yacc源文件的列表。

  • TARGET - 可執行應用程序的名稱。默認值為項目文件的名稱。(如果需要擴展名,會被自動加上。)

  • DESTDIR - 放置可執行程序目標的目錄。

  • DEFINES - 應用程序所需的額外的預處理程序定義的列表。

  • INCLUDEPATH - 應用程序所需的額外的包含路徑的列表。

  • DEPENDPATH - 應用程序所依賴的搜索路徑。

  • VPATH - 尋找補充文件的搜索路徑。

  • DEF_FILE - 只有Windows需要:應用程序所要連接的.def文件。

  • RC_FILE - 只有Windows需要:應用程序的資源文件。

  • RES_FILE - 只有Windows需要:應用程序所要連接的資源文件。

你只需要使用那些你已經有值的系統變量。例如,如果你不需要任何額外的INCLUDEPATH,那么你就不需要指定它,qmake會為所需的系統變量提供默認值。

例如,上例中的項目pro文件也可寫成這樣:

QT 5.7     pro  設置詳解

注意:如果條目是單值的,比如template或者目的目錄DESTDIR(可執行文件或二進制文件的發布目錄),我們是用“=”,但如果是多值條目,我們使用“+=”來為這個變量添加現有的條目值。

使用“=”會用新值替換原有的值。例如,如果我們寫了DEFINES = QT_DLL,其它DEFINES所有的條目值都將被刪除并用QT_DLL替代。

2.3 lib模板

  lib模板告訴qmake為建立一個庫而生成一個makefile。當使用這個模板時,除了app模板中提到的系統變量外,還有一個VERSION是被支持的。

你需要在為庫指定特定信息的.pro文件中使用它們。VERSION - 目標庫的版本號。比如,2.3.1。

2.4 subdirs模板

  subdirs模板告訴qmake生成一個makefile,它可以進入到特定子目錄并為這個目錄中的項目文件生成makefile并且為它調用make。

在這個模板中只有一個系統變量SUBDIRS可以被識別。這個變量中包含了所要處理的含有項目文件的子目錄的列表。這個項目文件的名稱是和子目錄同名的,這樣qmake就可以發現它。

例如,如果子目里是“myapp”,那么在這個目錄中的項目文件應該被叫做myapp.pro。

【3】配置變量CONFIG

  配置變量CONFIG 指定了編譯器所要使用的選項和所需要被連接的庫。配置變量中可以添加任何東西,但只有下面這些選項可以被qmake識別。

3.1 控制編譯器

下面這些選項控制著使用哪些編譯器標志:

  • release - 應用程序將以release模式連編。如果“debug”被指定,它將被忽略。

  • debug - 應用程序將以debug模式連編(與release互斥)。

  • debug_and_release - 工程同時用調試和發布模式編譯。

  • build_all - 如果指定是debug_and_release模式,工程默認是同時用調試和發布模式編譯。

  • ordered - 使用subdirs模板時,本選項指定了子目錄應該按照給出的順序編譯。

  • warn_on - 編譯器會輸出盡可能多的警告信息。如果“warn_off”被指定,它將被忽略。

  • warn_off - 編譯器會輸出盡可能少的警告信息(與warn_on互斥)。

3.2 連編類型

下面這些選項定義了所要連編的庫/應用程序的類型:

  • qt - 應用程序是一個Qt應用程序,并且Qt庫將會被鏈接。

  • thread - 應用程序是一個多線程應用程序。

  • x11 - 應用程序是一個X11應用程序或庫。

  • windows - 只用于“app”模板:應用程序是一個Windows下的窗口應用程序。

  • console - 只用于“app”模板:應用程序是一個Windows下的控制臺應用程序。

  • dll - 只用于“lib”模板:庫是一個共享庫(dll)。

  • staticlib - 只用于“lib”模板:庫是一個靜態庫。

  • plugin - 只用于“lib”模板:庫是一個插件,這將會使dll選項生效。

例如,如果你的應用程序使用Qt庫,并且你想把它連編為一個可調試的多線程的應用程序,你的項目文件應該會有下面這行:

QT 5.7     pro  設置詳解

注意,你必須使用“+=”,不要使用“=”,否則qmake就不能正確使用連編Qt的設置了,比如沒法獲得所編譯的Qt庫的類型了。

3.3 聲明QT庫模塊

如果CONFIG變量值中包含了qt這個值,qmake支持了qt的程序(因為qmake也可以用在非qt程序的編譯)這就要調整一些你程序中使用的qt的模塊,而QT變量,正是達到這個目的的。QT是用來聲明使用到的一些額外的模塊,例如:通過下面的方法使得xml和網絡模塊有效:

QT 5.7     pro  設置詳解

注意:默認情況下,qt包含了core 和 gui 模塊,所以上面的聲明僅僅是添加xml和網絡模塊到默認的列表中。

比如,下面的語句就是忽略了默認模塊,當編譯程序源碼時候會導致錯誤:

QT 5.7     pro  設置詳解

假如你想編譯一個不需要gui模塊的工程,你需要用“-=”操作符來去除包含。

例如:下面的語句就是小型的Qt工程會被編譯

QT 5.7     pro  設置詳解

下面的羅列顯示了QT變量可以使用的選項,并解釋了相應的特點:

  • core (included by default)   QtCore module 核心模塊

  • gui (included by default)    QtGui module 界面模塊

  • network                      QtNetwork module 支持網絡模塊

  • opengl                   QtOpenGL module 支持opengl圖像編程

  • sql                          QtSql module 支持sql數據庫驅動

  • svg                          QtSvg module 支持svg矢量圖形

  • xml                          QtXml module 支持xml模塊

  • qt3support                   Qt3Support module 支持qt3類

注意:添加opengl到QT變量里面,等價于往CONFIG變量里面添加。

所以對于Qt應用程序來說,沒必要同時往QT變量和CONFIG變量里面添加opengl選項。

3.4 關于 CONFIG(debug, debug|release)語法

CONFIG變量可以同時定義 debug 和 release,但只有一個處于active(當兩個互斥的值都出現時,最后設置的處于active狀態)

什么意思?怎么理解呢?請看如下:

QT 5.7     pro  設置詳解

如上寫法,release處于active狀態。胡說吧!你咋知道呢?嗯哼?不信咱們用上面的工程測試一下。

[1] 還原測試現場。把工程文件夾proDemo同級的目錄及文件刪除干凈(為了驗證準確性,先還原測試實驗現場,以下類似做法意義相同)。

[2] 修改內容。把工程中的pro類型文件改為下面的內容:

QT 5.7     pro  設置詳解

[3] 編譯構建。首先把工程qmake一下,然后構建。

好,完成測試操作。激動人心的時刻到了!這個時候,我們會發現proDemo同級目錄生成了appFile文件夾。

打開此文件夾,發現有兩個文件:proDemo.exe 和 proDemo.exe.embed.manifest

壞了!從pro文件來看,我們debug和release版本生成的目標文件名稱是相同的(即TARGET值)。腫么辦呢?為了驗證是release版本的可執行程序!

這樣吧!我們在上級目錄即proStudy文件夾中搜索*pdb文件(調試debug版本必生成的文件),沒有搜索到。OK!那就說明是Release版本。

其實,另外一種辦法,我們會發現proDemo工程文件夾同級目錄下也會生成一個build-proDemo-Desktop_Qt_5_3_MSVC2010_OpenGL_32bit-Debug名稱的文件夾(說明一點:剛剛構建程序時QT Creator的模式是Debug),而這個文件夾中會有debug和release兩個文件夾,你會發現debug文件是空的,而release文件夾中才有內容。這點也可以說明剛剛的確生成的是release版本。

但是,上面的寫法,debug 和 release都可以通過測試,而且閱讀比較費勁,反正總感覺迷惑性太強,如何處理呢?建議寫法如下:

QT 5.7     pro  設置詳解

這種情況下,我們再來分析一下:

[1] 還原現場。清空proDemo工程目錄下除過proDemo而外的其他文件夾(同上)。

[2] 切換模式。分別切換Debug和Release版本:

QT 5.7     pro  設置詳解

[3] 編譯構建。各自執行qmake,并進行構建,再運行,可以看到同樣的窗體:

QT 5.7     pro  設置詳解

好勒~ 盡管,看起來是同樣的窗體,但是,要理解是兩個完全不同版本的應用程序。

現在看看proDemo目錄下會多出這樣兩個文件夾:demo_Debug 和 demo_Release,在其各自目錄下,可以分別發現可執行程序proDemo_Debug和proDemo_Release,即剛剛兩個窗體應用程序。

同時,會發現再沒有生成appFile文件夾,這點也可以驗證DESTDIR 后面的“=”與 “+=”的作用區別。

那么,再回頭看 CONFIG(debug, debug|release)這種語法是什么含義呢?

注解:兩個參數,前者是要判斷active的選項,后者是互斥的選項的一個集合。

有人覺得難道這么麻煩?上面的例子中,生成兩種版本的應用程序,我們通過對Qt Creator構建模式進行了切換,那么想直接生成呢?

可以直接加選項build_all。比如,可以把pro文件改為這樣的內容:

QT 5.7     pro  設置詳解

然后清空工程文件夾同級其它目錄,再qmake一下,編譯后,可以看到不用切換Qt Creator情況下,也我們一次性同時生成了兩種版本的可執行程序。

【3】Qt Creator創建工程的pro文件

  下面分別把Qt Creator新建的不同類型工程默認的pro文件羅列一下,可以參考學習:

  3.1 新建proDemo1工程(注意:模板選擇,項目:應用程序;Qt Widgets Application)。步驟如下:Qt Creator--->New Project--->應用程序--->Qt Widgets Application--->名稱為:proDemo1(創建路徑自己擬定,本地為F:\Source\proStudy)--->類信息保持不變--->完成。對應的pro文件如下:

QT 5.7     pro  設置詳解

  此pro文件其實與本文第一張圖片相同。因為所建工程相同,默認pro文件也相同。

  3.2 新建proDemo2工程(注意:模板選擇,項目:應用程序;Qt Quick Application)。步驟如下:Qt Creator--->New Project--->應用程序--->Qt Quick Application--->名稱為:proDemo2(創建路徑自己擬定,本地為F:\Source\proStudy)--->Qt Quick component set : Qt Quick Controls1.2--->完成。對應的pro文件如下:

QT 5.7     pro  設置詳解

  此pro文件利用include引入了pri類型的文件。

  3.3 新建proDemo3工程(注意:模板選擇,項目:應用程序;Qt 控制臺應用)。步驟如下:Qt Creator--->New Project--->應用程序--->Qt 控制臺應用--->名稱為:proDemo3(創建路徑自己擬定,本地為F:\Source\proStudy)--->類信息保持不變--->完成。對應的pro文件如下:

QT 5.7     pro  設置詳解

  此pro文件去掉了CONFIG配置變量默認的app_bundle項,由于是控制臺應用程序。

  3.4 新建proDemo4工程(注意:模板選擇,項目:庫;C++庫)。步驟如下:Qt Creator--->New Project--->庫--->C++ 庫--->名稱為:proDemo4(創建路徑自己擬定,本地為F:\Source\proStudy)--->類型:共享庫--->其他項均默認--->完成。對應的pro文件如下:

QT 5.7     pro  設置詳解

  此pro文件添加了unix環境的控制。

  3.5 新建proDemo5工程(注意:模板選擇,項目:庫;C++庫)。步驟如下:Qt Creator--->New Project--->庫--->C++ 庫--->名稱為:proDemo5(創建路徑自己擬定,本地為F:\Source\proStudy)--->類型:靜態鏈接庫--->其他項均默認--->完成。對應的pro文件如下:

QT 5.7     pro  設置詳解

  此pro文件與3.4工程的最大區別是為配置變量CONFIG添加了staticlib值,因為工程類型選擇為靜態鏈接庫。

  3.6 新建proDemo6工程(注意:模板選擇,項目:庫;C++庫)。步驟如下:Qt Creator--->New Project--->庫--->C++ 庫--->名稱為:proDemo6(創建路徑自己擬定,本地為F:\Source\proStudy)--->類型:Qt Plugin--->其他項均默認--->完成。對應的pro文件如下:

QT 5.7     pro  設置詳解

  此pro文件添加其他文件OTHER_FILES配置變量,另外,配置變量CONFIG添加了plugin值,因為工程類型選擇為Qt Plugin。

  3.7 新建proDemo7工程(注意:模板選擇,項目:其他項目;Qt單元測試)。步驟如下:Qt Creator--->New Project--->其他項目--->Qt單元測試--->名稱為:proDemo7(創建路徑自己擬定,本地為F:\Source\proStudy)--->其他項均默認--->完成。對應的pro文件如下:

QT 5.7     pro  設置詳解

  此pro文件為QT變量添加testlib值。

  3.8 新建proDemo8工程(注意:模板選擇,項目:其他項目;Qt4設計師自定義控件)。步驟如下:Qt Creator--->New Project--->其他項目--->Qt4設計師自定義控件--->名稱為:proDemo8(創建路徑自己擬定,本地為F:\Source\proStudy)--->控件類:customControl--->其他項全部默認--->完成。對應的pro文件如下:

QT 5.7     pro  設置詳解

  此pro文件中當Qt版本大于4.0時為QT變量添加值designer。


向AI問一下細節
推薦閱讀:
  1. QT應用程序圖標
  2. QT插件

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt bs
AI

崇州市| 彝良县| 安丘市| 绥芬河市| 姜堰市| 宁国市| 临安市| 廊坊市| 刚察县| 辽阳市| 朝阳区| 长葛市| 庆安县| 南城县| 兴安县| 海晏县| 隆林| 科技| 望都县| 绥滨县| 偏关县| 如皋市| 定陶县| 获嘉县| 尤溪县| 呼玛县| 莎车县| 共和县| 蓝山县| 伊川县| 沁水县| 白玉县| 孝昌县| 沁源县| 紫金县| 晋中市| 常德市| 金湖县| 临湘市| 碌曲县| 农安县|