1. 程式人生 > >Qt開發技巧:編寫.pro檔案,在構建流程中加入命令列的方法

Qt開發技巧:編寫.pro檔案,在構建流程中加入命令列的方法

1、在專案構建前執行命令

在專案構建前執行命令cmd 存在問題
system(cmd) 存在執行多次的問題,可以參考message函式的QMake Manual說明

優化後的表示式如下,這樣此命令只會在構建前執行一次:

!build_pass:system(cmd)

2、在連結前後執行,使用QMAKE_PRE_LINK/QMAKE_POST_LINK

QMake Manual中有QMAKE_PRE_LINK/QMAKE_POST_LINK的說明。

在連結執行前執行命令cmd 在連結執行後執行命令cmd 存在問題
QMAKE_PRE_LINK += cmd QMAKE_POST_LINK += cmd 只有在原始碼修改導致重新連結成目標檔案時才會執行

3、在構建前後插入命令

首先需要弄清楚qmake和make的協作過程:

  • qmake.exe會解析.pro檔案生成makefile檔案,生成makefile。
  • 之後會呼叫make工具進行編譯連結等構建操作。

這裡使用的QMake變數是QMAKE_EXTRA_TARGETS和PRE_TARGETDEPENS變數。具體用法請參考QMake Manual。
理解下面的處理過程需要了解一些makefile知識。

示例

在.pro檔案中加入下面語句

# cmds
# 構造自定義生成目標物件
mybuild.target=pre_build_cmds
win32{
mybuild.commands=$$PWD/UpdatePluginLib.cmd
}else{
}
# 加入到自定義目標物件列表中
QMAKE_EXTRA_TARGETS += mybuild

# 加入到構建依賴列表最前面,會最先被執行,這裡必須寫目標物件名稱,不能是mybuild
PRE_TARGETDEPS += pre_build_cmds

檢視makefile.Debug檔案
在這裡插入圖片描述

可以看到目標被加入到構建依賴的最前面了。pre_build_cmd目標的定義可在makefile檔案中找到。
同理如果需要在構建完成後執行一些命令,則可以使用QMake對應的變數POST_TARGETDEPS,將自定義生成目標加入到變數中:

POST_TARGETDEPS += after_build_cmds

使用場景

一般子目錄專案需要先構建外掛或動態庫依賴,然後再將輸出檔案更新到最終的應用程式專案中,參與最終的構建,一般做法是寫批處理指令碼,然後手動雙擊更新。有了上述方法後,一切都可以一鍵構建。

總結

一般使用第三種方法,前提是需要清楚地瞭解Qt的構建過程,以及makefile的相關知識。