While rewritting a few of my personal tools from Rust back to C++, I found myself willing to automate the build process. At first, I tried to invoke MSVC’s cl compiler directly, but it has proven to be absolute hell to do.
Eventually I stumbled upon the marvellous MSBuild tool, which is capable of understanding the .sln file and take all compiler and linker options from it:
msbuild foo.sln /p:Configuration=Release /p:Platform=x64
With that, I finally had the script to automate one build:
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" set APP="vscode-font-patch" msbuild %APP%.sln /p:Configuration=Release /p:Platform=x64 move /Y x64_Release\%APP%.exe "D:\Stuff\apps\_audio tools\" rmdir /S /Q x64_Release pause
Then it was time to automate the release build of all my listed projects. And I found out how awkward .bat syntax is. Loop syntax is particularly horrifying. In the end, I was able to cook a script to automate my C++ builds:
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" set APPS[0]="vscode-font-patch" set "i=0" :SymLoop if not defined APPS[%i%] goto :EndLoop call set APP=%%APPS[%i%]%% cd %APP% echo Building %APP%... msbuild %APP%.sln /p:Configuration=Release /p:Platform=x64 move /Y x64_Release\%APP%.exe "D:\Stuff\apps\_audio tools\" rmdir /S /Q x64_Release cd .. set /a "i+=1" goto :SymLoop :EndLoop pause