Our solution was to use an environment variable with /D
defines in it, combined with the Additional Options box in visual studio.
- In Visual Studio, add an environment variable macro,
$(ExternalCompilerOptions)
, to the Additional Options under project options->C/C++->Command Line (remember both Debug and Release configs) - Set the environment variable prior to calling msbuild. Use the
/D
compiler option to define your macros
c:\> set ExternalCompilerOptions=/DFOO /DBAR
c:\> msbuild
Item #1 ends up looking like this in the vcxproj file:
<ClCompile>
<AdditionalOptions>$(ExternalCompilerOptions) ... </AdditionalOptions>
</ClCompile>
This works for me with VS 2010. We drive msbuild from various build scripts, so the environment variable ugliness is hidden a bit. Note that I have not tested if this works when you need to set the define to specific value ( /DACTIVATE=1
). I think it would work, but I’m concerned about having multiple ‘=’s in there.
H^2