Qt小技巧15.Pro文件的牀邊故事

1 引言

這篇文章很簡單,小結下Pro文件的那些好用但是又不常用的功能,用好了Pro文件,對開發人員來說那是大有裨益,身體倍兒棒。

2 說正事

2.1 定義一個字符串宏

例如我想定義一個宏,這個宏是用來描述軟件版本的字符串,在Pro文件中定義後就可以在任意地方使用了,統一管理,十分方便。

qDebug() << APP_VERSION;  //輸出:V1.0.0

2.2 判斷模塊是否存在

有時候Pro文件引用了一個不存在的模塊,會報如下錯誤:

Project ERROR: Unknown module(s) in QT

其實Pro文件有相關函數對模塊的存在進行判斷的:

qtHaveModule(printsupport): QT += printsupport
qtHaveModule(opengl): QT += opengl

意思大家應該一看就懂,這樣有個好處,只加載當前存在的模塊,不存在就略過啦。
還有一點,這裏以opengl模塊爲例,如果工程引用了該模塊,則在代碼中就可以通過一個宏決定是否編譯代碼:

#ifdef QT_OPENGL_LIB
    //todo
#endif

2.3 構建靜態庫

win下會生成lib靜態庫,很是簡單:

TEMPLATE = lib
CONFIG += staticlib c++11

2.4 構建子項目

TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += src examples

這裏的話會先構建src再構建examples,由ordered(有序的)指定。

2.5 目標文件自動生成

TARGET =$$qtLibraryTarget(myplugin)

即debug模式下TARGET=myplugind,release模式下TARGET=myplugin,自動處理了。

2.6 文件複製

首先了解下這兩個變量,這兩個變量默認爲空,不會做任何操作:

QMAKE_PRE_LINK 表示編譯前執行
QMAKE_POST_LINK 表示編譯後執行

舉一個例子:

srcIncludeFile = $$PWD/*.h                              #要複製的文件
srcIncludeFile = $$replace(srcIncludeFile, /, \\);      #windows上需要換成反斜槓
outputIncludeDir = $$PWD/palletsdk/include              #要複製到哪裏去
outputIncludeDir = $$replace(outputIncludeDir, /, \\);  #windows上需要換成反斜槓

QMAKE_PRE_LINK += copy /Y $$srcIncludeFile $$outputIncludeDir    #編譯前執行復制操作
QMAKE_POST_LINK += copy /Y $$srcIncludeFile $$outputIncludeDir   #編譯完成後執行復制操作

至於編譯前後要做什麼,大家可以自行發揮了。

2.7 關於Pro文件中的一些符號區別

下面這些符號是不是傻傻分不清楚:

$() $$() $$[] $${}

沒關係,這裏有一篇文章寫得比較清楚,進入原文

3 結束

就寫這麼多啦,Pro文件內容很多,要想深入學習最好還是看幫助文檔,其他的用法網上一搜也是一大堆,就不多說了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章