Visual studio 如何在VC++;?

Visual studio 如何在VC++;?,visual-studio,visual-c++,visual-studio-2008,Visual Studio,Visual C++,Visual Studio 2008,我有很多解决方案,其中包含大量的项目。我希望能够为所有项目使用的解决方案定义全局设置。例如,包含目录。我希望能够在一个地方为解决方案中的所有项目更改include目录 当我搜索一个解决方案时,我发现了对问题的一个很好的描述,但这里建议的解决方案是,项目属性表是按项目定义的,而不是按解决方案定义的 我可以使用环境变量或VisualStudio设置,但是需要编译代码的每个人都必须定义完全相同的设置 有人能建议一种方法吗?谢谢。不久前我搜索了完全相同的东西,但没有找到我想要的东西 唯一可能接近此功能的

我有很多解决方案,其中包含大量的项目。我希望能够为所有项目使用的解决方案定义全局设置。例如,包含目录。我希望能够在一个地方为解决方案中的所有项目更改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。