Visual studio 如何在VC++;?
我有很多解决方案,其中包含大量的项目。我希望能够为所有项目使用的解决方案定义全局设置。例如,包含目录。我希望能够在一个地方为解决方案中的所有项目更改include目录 当我搜索一个解决方案时,我发现了对问题的一个很好的描述,但这里建议的解决方案是,项目属性表是按项目定义的,而不是按解决方案定义的 我可以使用环境变量或VisualStudio设置,但是需要编译代码的每个人都必须定义完全相同的设置Visual studio 如何在VC++;?,visual-studio,visual-c++,visual-studio-2008,Visual Studio,Visual C++,Visual Studio 2008,我有很多解决方案,其中包含大量的项目。我希望能够为所有项目使用的解决方案定义全局设置。例如,包含目录。我希望能够在一个地方为解决方案中的所有项目更改include目录 当我搜索一个解决方案时,我发现了对问题的一个很好的描述,但这里建议的解决方案是,项目属性表是按项目定义的,而不是按解决方案定义的 我可以使用环境变量或VisualStudio设置,但是需要编译代码的每个人都必须定义完全相同的设置 有人能建议一种方法吗?谢谢。不久前我搜索了完全相同的东西,但没有找到我想要的东西 唯一可能接近此功能的
有人能建议一种方法吗?谢谢。不久前我搜索了完全相同的东西,但没有找到我想要的东西
唯一可能接近此功能的是。这并不完全是全局性的,因为它由一个项目拥有并由其他人使用。也许您可以在解决方案中添加一个MSBuild文件,在其中定义许多共享属性,然后将该文件添加到所有实际项目中 也就是说,在“设置”MSBuild文件中定义了许多属性:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WinUnitIncludeDir>C:\Includes\WinUnit</WinUnitIncludeDir>
<!-- Other shared properties go here -->
</PropertyGroup>
</Project>
C:\Includes\WinUnit
从实际项目中,您可以参考以下内容:
<Project ...>
...
<Import Project="path/to/settings.msbuild" />
...
<Configurations>
<Configuration ...>
<Tool Name="VCCLCompilerTool"
...
AdditionalIncludeDirectories="$(WinUnitIncludeDir)"
... />
...
...
...
</Project>
...
...
...
...
...
我们使用属性表来实现这一点。可以将单个属性页指定给解决方案中的所有项目。从那时起,您可以更改该属性页中的设置,它将影响所有项目
高级提示:我们实际上使用多个属性表(例如,一个用于发布目标类型,一个用于调试目标类型)。提示是顺序非常重要。如果手动编辑项目文件,则最后一个属性页将替代列表中先前属性页中的设置。如果您在GUI中进行编辑,则顶部的会覆盖其下方的。正如其他人所建议的,属性表可以执行您想要的操作。窍门是使用<代码>继承属性表>代码>,如C++中使用<代码>包含< /代码>。注意:项目文件和属性表文件的XML略有不同。下面是两个项目(
prjA.vcproj
和prjB.vcproj
)的精心设计和简化示例,其中包括相同的属性表(sln.vsprops
),其本身包括另一个(strict.vsprops
):
严格的.vsprops
<VisualStudioPropertySheet ...>
<Tool Name="VCCLCompilerTool" WarningLevel="3" WarnAsError="true"/>
</VisualStudioPropertySheet>
<VisualStudioPropertySheet ... InheritedPropertySheets=".\strict.vsprops">
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="NOMINMAX=1"
RuntimeTypeInfo="true"
/>
</VisualStudioPropertySheet>
sln.vsprops
<VisualStudioPropertySheet ...>
<Tool Name="VCCLCompilerTool" WarningLevel="3" WarnAsError="true"/>
</VisualStudioPropertySheet>
<VisualStudioPropertySheet ... InheritedPropertySheets=".\strict.vsprops">
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="NOMINMAX=1"
RuntimeTypeInfo="true"
/>
</VisualStudioPropertySheet>
prjA.vcproj
<VisualStudioProject ...>
<Configurations>
<Configuration ... InheritedPropertySheets=".\sln.vsprops">
</Configuration>
</Configurations>
...
</VisualStudioProject>
<VisualStudioProject ...>
<Configurations>
<Configuration ... InheritedPropertySheets=".\sln.vsprops">
</Configuration>
</Configurations>
...
</VisualStudioProject>
...
prjB.vcproj
<VisualStudioProject ...>
<Configurations>
<Configuration ... InheritedPropertySheets=".\sln.vsprops">
</Configuration>
</Configurations>
...
</VisualStudioProject>
<VisualStudioProject ...>
<Configurations>
<Configuration ... InheritedPropertySheets=".\sln.vsprops">
</Configuration>
</Configurations>
...
</VisualStudioProject>
...
您可能还会发现它的名称和答案很有用。正如建议的那样,您应该查看属性表(又名.vsprops文件)。
我写了一个很简短的介绍这个特性。 VisualC++ 2008不使用MSBuw(它使用VCuBug),但是可以使用与Stephen W. Carson所建议的属性文件类似的技术。Visual C++ 2010将使用MSBug。