從 msbuild CLI 傳遞 C++ preprocess define

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

Reference

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.