【发布时间】:2013-02-14 23:48:16
【问题描述】:
以下内容摘自一个常规的 VS2010 C++ 项目。
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
如果我编辑PreprocessorDefinitions,我可以设置预处理器使用的定义。我可以通过#ifdef 等在我的代码中看到这一点。
但是,如果我使用以下内容
<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>
我还可以通过消息看到PreprocessorDefinitions 包含我通过Properties="PreprocessorDefinitions=THISGETSSETBUTDOESNOTHING" 设置的值,但我无法使用#ifdef 等控制我的构建。
如果我使用常规设置并尝试使用<Message Text="PreprocessorDefinitions: $(PreprocessorDefinitions)" 输出PreprocessorDefinitions,则该字段实际上是空白的,并且不包含预期的<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>,尽管我可以使用其中任何一个键来控制使用#ifdef 等的构建。
- 这是为什么呢?
- 如何通过任务
Properties元素为 VS2010 C++ 项目传递 PreprocessorDefinitions?
【问题讨论】:
标签: msbuild