Comment définir PreProcessorDefinitions comme une tâche propery pour la tâche msbuild

Ce qui suit est tiré à partir d'une VS2010 projet C++.

    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>Use</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>

Si je modifier PreprocessorDefinitions je peux mettre une définition qui est utilisée par le préprocesseur. Je peux le voir dans mon code via #ifdef etc.

Cependant, si j'utilise la suite

  <Target Name="NormalBuild" Condition=" '$(_InvalidConfigurationWarning)' != 'true' " DependsOnTargets="_DetermineManagedStateFromCL;CustomBeforeBuild;$(BuildDependsOn)" Returns="@(ManagedTargetPath)">
    <ItemGroup>
        <ManagedTargetPath Include="$(TargetPath)" Condition="'$(ManagedAssembly)' == 'true'" />
    </ItemGroup>
      <Message Text="PreprocessorDefinitions: $(PreprocessorDefinitions)" Importance="High" />
  </Target>

  <Target Name="TestBuild" Returns="@(ManagedTargetPath)">
    <MSBuild Projects="demo.vcxproj" Targets="NormalBuild" Properties="PreprocessorDefinitions=THISGETSSETBUTDOESNOTHING"/>
  </Target>

je peux aussi voir via le message que PreprocessorDefinitions contient la valeur que j'via Properties="PreprocessorDefinitions=THISGETSSETBUTDOESNOTHING" mais je ne peux pas contrôler mon build en utilisant #ifdef etc.
Si j'utilise régulièrement le programme d'installation et essayez de sortie PreprocessorDefinitions à l'aide de <Message Text="PreprocessorDefinitions: $(PreprocessorDefinitions)" le champ est en fait vide et ne contient pas les attendus <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> bien que je peux utiliser l'une de ces touches pour contrôler mon build en utilisant #ifdef etc.

  1. Pourquoi est-ce?
  2. Que puis-je faire pour passer PreprocessorDefinitions für un VS2010 Projet C++ via les tâches Properties élément?

OriginalL'auteur Johannes | 2013-02-28