1. 程式人生 > >msvc:BAT指令碼判斷是否設定MSVC編譯的環境變數(執行vcvarsall.bat)

msvc:BAT指令碼判斷是否設定MSVC編譯的環境變數(執行vcvarsall.bat)

關於設定MSVC環境變數的方式參見我之前寫一篇部落格:《msvc交叉編譯:使用vcvarsall.bat設定命令列編譯環境》
如果你在CMD中反覆執行vcvarsall.bat會導致環境變數儲存空間溢位而出錯。
所以寫BAT指令碼如果不判斷是否設定了MSVC環境變數,而每次編譯的時候都執行vcvarsall.bat,在同一個CMD下執行幾次就會出錯了,只能關閉當前的CMD,再重開一個。
這是個小毛病,但有時也蠻煩人的,所以就想有沒有辦法避免這個,能不能在指令碼中判斷MSVC環境變數是否已經設定。

通過閱讀vcvarsall.bat的原始碼,找到了解決方案:vcvarsall.bat

執行成功後會設定一個環境變數VisualStudioVersion來儲存當前MSVC編譯器的版本號。

這裡寫圖片描述

所以只要判斷這個變數是否定義就可以確定是否已經正確設定MSVC環境變數:

以下程式碼片段就是應用示例:

if exist build rmdir project.vs2015 /s/q
mkdir project.vs2015
cd project.vs2015
rem 通過判斷 VisualStudioVersion 是否定義確定是否有必要執行vcvarsall.bat
rem 避免重複執行vcvarsall.bat造成環境變數儲存空間溢位
if not defined VisualStudioVersion (
    call
"%VS140COMNTOOLS%..\..\vc/vcvarsall" x86_amd64 ) cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX==..\release\fse_windows_x86_64 ..