如何使用.vsprops文件覆盖MS Visual Studio中的VC ++目录

时间:2010-02-17 20:47:20

标签: visual-studio-2008 visual-c++ visual-studio-2005

我想覆盖Visual Studio(devenv.exe)用于编译器和库路径的目录。我知道如何通过Tools-> Options-> VC ++目录以交互方式执行此操作,但我想自动执行此操作。

http://msdn.microsoft.com/en-us/library/t9az1d21(VS.80).aspx有一个诱人的注释:“如果你想设置目录搜索路径(对于你的项目),可以由其他用户共享或可以应用于多台计算机,Visual C ++提供了通过项目属性表使用此对话框的替代方法。有关更多信息,请参见属性表(C ++)。“

如果您点击Property Sheets文档的链接,那么有关该机制的大量信息,但没有关于您需要设置的实际属性的信息。

我在%LocalAppData%\ Microsoft \ VisualStudio \ 8.0 \ VCComponents.dat(对于VS 2005,对于VS 2008)中找到了由VC ++目录对话框填充的信息;它似乎在VC \ VC_OBJECTS_PLATFORM_INFO \ win32 \目录和... \ x64 \目录下设置了各种属性。

之前有没有人这样做过,知道从VCComponents.dat中使用的属性名到.vsprops文件中使用的名称的映射是什么?

理想情况下,我希望在VS2005,VS2008和VS2010中使用它。

在VS2010中,Microsoft完全取消了“视图选项”下的“VC ++目录”对话框,按项目制作,现在您将获得一个交互式UI,用于在“项目属性”中编辑这些目录,而不是“视图选项”。这也意味着在属性管理器中有一个UI;然后,如果你想按照机器而不是像以前那样对每个机器进行更改,你只需按照你想要的方式设置一个属性表,并使你的所有项目继承。这听起来像是对旧方式的重大改进。并且直接做我想做的事情。但仅限于VS2010。

VS2005和VS2008没有UI在项目或属性表中设置这些属性;我很高兴手工完成,但我不知道它应该是什么样的!

这是一个空的VS 2005 .vsprops文件:

<?xml version="1.0"?>
<VisualStudioPropertySheet
    ProjectType="Visual C++"
    Version="8.00"
    Name="pathSettings"
    >
</VisualStudioPropertySheet>

我安装了VS 2010并使用其整洁的新GUI在搜索目录中进行更改;它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup>
    <ExecutablePath>C:\Test;$(PATH)</ExecutablePath>
  </PropertyGroup>
</Project>

然而,这在VS2005中不会逐字逐句 - VS2005拒绝加载它(抱怨没有发现DTD /架构声明)。

我把它插入容器中,响应于VS2005根据父元素'VisualStudioPropertySheet'的内容模型告诉我“Element'PropertyGroup'是意料之外的。期望:工具,UserMacro。”工具和UserMacro是MSDN页面中示例中显示的唯一内容[drat - StackOverflow不会让我作为新用户在这里添加超链接 - 首先是'属性表工具usermacro'的Google搜索结果] - 也许那些是VS2005属性表中唯一合法的东西吗?

1 个答案:

答案 0 :(得分:8)

首先,实际上有一个gui来编辑属性表,就像你谈到的所有VS版本中的项目属性一样。

View->Other Windows->Property Manager

打开一个窗口,您可以在其中查看所有项目配置和属性表层次结构。

属性表可用于覆盖vcproj文件所具有的所有属性,还具有用户宏。 要覆盖您所谈论的路径,这是VS2008的enample示例属性表,用于设置中间,输出,包含和库目录;将它放在PROPERTIES Manager的层次结构顶部,以确保它生效:

<?xml version="1.0" encoding="Windows-1252"?>
<!-- override paths -->
<VisualStudioPropertySheet
  ProjectType="Visual C++"
  Version="8.00"
  Name="PathSettings"
  IntermediateDirectory="$(TEMP)\$(ProjectName)_$(ConfigurationName)"
>
<Tool
  Name="VCCLCompilerTool"
  AdditionalIncludeDirectories="d:\api\include"
/>
<Tool
  Name="VCLibrarianTool"
  OutputFile="c:\mylibs"
/>
<Tool
  Name="VCLinkerTool"
  OutputFile="c:\myoutput"
  AdditionalLibraryDirectories="d:\api\_lib"
/>

这也适用于VS2005,但不适用于VS2010:因为你发现它使用了不同的格式,所以你必须分别保留它们中的两个。