Microsoft 提供 msbuild 可以直接從 command line 建置 Visual Studio 專案。由於我們的 Project build script 中包含多個 VS 專案,並且希望在不同的需求下編譯出不同的版本,因此正在編譯時期可以客製化 VS 專案的方法。
由於程式目前是用 C++ preprocess 用不同的 define 來開關功能,因此怎麼從 msbuild 提供不同的 define 就是主要的解決方式。
首先,可以傳遞給 msbuild 的叫做 property,需要在專案檔內手動建立 property group。中間粗體的部分就是 property 的名稱。
<PropertyGroup>
<MyProperty></MyProperty>
</PropertyGroup>
第二步驟是要讓 C++ preprocess define 可以吃到這個設定,可以從 Project Properties -> Configuration Propertis -> C/C++ -> Preprocessor 或是直接用編輯器打開專案檔找到下面 section。
<ClCompile>
....
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
....
</ClCompile>
將剛剛定義的 property 當作變數加進去。要注意的是這邊用的是 $ 號,而不是 %
<ClCompile>
....
<PreprocessorDefinitions>WIN32;NDEBUG;$(MyProperty);%(PreprocessorDefinitions)</PreprocessorDefinitions>
....
</ClCompile>
最後,就可以透過 msbuild 的 /p 選項來傳遞 property 了
msbuild myproj.vcxproj /p:MyProperty=DEBUGOFF