Qt開發技巧:編寫.pro檔案,在構建流程中加入命令列的方法
阿新 • • 發佈:2018-11-17
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的相關知識。