一個實用批處理指令製作過程分享:Perforce更新完後開啟VisualStudio再編譯

不三週助發表於2022-02-12

需求來源

筆者從事Unreal遊戲客戶端工作,使用VisualStudio開發,然後經常幹一個事:就是使用Perforce(或svn)拉取最新程式碼,(一些時間後)拉取完之後然後開啟 專案.sln,即VisualStudio, (一些時間後)再點選 VisualStudio 中的Build按鈕開始編譯引擎。這很重複...
然後因為新年伊始告訴自己不要再做重複的事,無論如何也要抽時間解決重複的事。相信很多同學都有這種體驗...

需求分析

整體的需求是:使用Perforce先更引擎的程式碼,再更專案的程式碼,再開啟.sln,再點選build。就是必須得按照順序,因為依賴等關係,如果不按照順序可能會出現編譯不過等奇葩問題。因為我們使用Perforce,Perforce跟svn一樣是需要登入的,於是那麼肯定需要設定賬號&WorkSpace等個人資料資訊。
拆分需求如下:

  1. 設定登入Perforce相關賬號資訊
  2. 更新A目錄下的資源完成後,再更新B目錄下程式碼
  3. 開啟.sln
  4. 點選Build

問題分析

對於上述需求第一個問題很簡單,百度上都有答案,也很簡單.但是還是給出如下參考圖, 注意WorkSpace的設定,指令比較奇怪,是P4CLIENT
節點

set P4PORT=XX.X.XX.111:1666
set P4USER=ceshideng
set P4PASSWD =ceshimima
set P4CLIENT=WorkA

第二個問題就是如何順序更新目錄,這個事情可以拆分為2個:更新指定目錄&順序執行。

  • 更新指定目錄
    節點
p4 sync //Projects/XXX2019/XXX/XXX/...

注意這裡的目錄得是Depot中的,並且後面跟上三個點。
因為這裡我要順序執行更新兩個目錄得資源,給出上述指令,會同時執行,沒達到我想要的結果。查了一下,一個非常重要的知識點,call 後面跟指令,可以順序執行指令,因此需要 call。 於是得出

call p4 sync //Projects/XXX2019/XXX/XXX/...

然後難點就是第三個問題和第四個問題,通過批處理開啟一個exe很簡單,但是這裡的.sln並不是exe,並且還要"點選Build"。一開始時候筆者搞這個花了很久。得出要解決這兩個問題需要理解devenv的命令用法。
devenv是VisualStudio的可執行程式,一般安裝在“C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE”下。簡單用法如下:

Devenv SolutionName /configcode

這裡需要注意configcode 的用法,我們這裡因為需要編譯後啟動程式,所以需要使用 /run,這裡configcode的引數用法可以參考:https://www.cnblogs.com/cindy-hu-23/p/3561081.html
於是第三個問題和第四個問題要合併為一個問題:通過批處理如何build .sln檔案
批處理直接呼叫Microsoft Visual Studio 8\Common7\IDE\ 目錄內的 devenv.exe ,具體詳細用法可以如下:

call "C:Microsoft Visual Studio\2019\Professional\Common7\IDE\devenv.exe" H:\目錄層次結構\XXX.sln /run

完整主要指令如下:

set P4PORT=10.1.168.XXX:8666
set P4USER=xxxdeng
set P4PASSWD =ceshimima
set P4CLIENT=WorkA
echo 開始更引擎:%date%  
call p4 sync //Projects/XXX/UE4NEXT_Stable/...
echo 開始更XGame
call p4 sync //Projects/XXX/Trunk/XGame/...
echo Perforce更新完成 ,開始Run工程
call H:
call cd H:\WorkA\XXX\
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\devenv.exe" XGame.sln /run
echo Build Suc...
pause

一個非常實用的指令搞定了...有需要的可以自己擴充套件。

擴充套件

  • 可以加上定時,接下來多少天內每天晚上啥時候執行
  • 判斷.sln是否開啟過,如果開啟就關閉再更新資源等
  • 如果更新時候發現衝突等,使用指令優先使用線上資源。

補充:

關於devenv.exe所在路徑,可以通過Everything查詢。如下:

節點

參考:

相關文章