【问题标题】:how to use .vsprops file to override VC++ Directories in MS Visual Studio如何使用 .vsprops 文件覆盖 MS Visual Studio 中的 VC++ 目录
【发布时间】:2010-02-17 20:47:19
【问题描述】:

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

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

如果您点击“属性表”文档的链接,会有大量关于机制的信息,但没有关于您需要设置的实际属性的信息。

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

有没有人这样做过并且知道从 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' 的内容模型,元素 'PropertyGroup' 是意外的。期望:工具,UserMacro。”工具和 UserMacro 是 MSDN 页面示例中显示的唯一内容 [drat - StackOverflow 不会让我作为新用户在此处放置超链接——“属性表工具 usermacro”的第一个 Google 搜索结果]——也许是那些VS2005 属性表中唯一合法的东西是什么?

【问题讨论】:

  • 更多链接:- 属性表文档:msdn.microsoft.com/en-us/library/a4xbdz1e(VS.80).aspx - 关于 VS 2010 中的更改的文章:blogs.msdn.com/vsproject/archive/2009/07/07/vc-directories.aspx 我不知道在 .vsprops 文件中放入什么(VS2005 或 2008)或 .props 文件 (2010) 来完成与通过编辑 VCComponents.dat 来完成相同的事情,为每个构建平台设置或覆盖路径/包含/库搜索目录。
  • 这似乎有帮助/相关(仍在处理中):stackoverflow.com/questions/142708/…
  • 好的,如果只有 Tool 和 UserMacro 在那里工作,也许我必须找到正确的方法来使用 Tool 指令覆盖编译器的包含路径和链接器的包含路径。不过,这对可执行路径没有帮助,是吗?
  • 我也在 MSDN 上交叉发布了这个问题:social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/…
  • 嗯——它看起来越来越不像这是可能的但没有记录,并且越来越像文档中的那个短语只是一个玩笑,直到 VS2010 才真正可能。我知道 /useenv (通过环境变量设置你想使用的目录),但是一旦你想为多个平台(比如 x86 和 x64)构建它就会变得丑陋,因为你需要设置 exe 路径和 lib不同平台的路径不同。

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


【解决方案1】:

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

View->Other Windows->Property Manager

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

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

<?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:因为您发现它使用不同的格式,所以您必须将它们分开保存。

【讨论】:

  • 嗯,看起来很有希望。感谢您的回答,我想知道为什么官方 MS 论坛一年前不能告诉我!我很乐意接受你的回答,但我现在不容易验证它。一个问题:这看起来与我在原始帖子中的第三条评论一致(日期为 2010 年 2 月 19 日 0:21,抱歉我无法链接到它)——仅使用工具——如何设置可执行文件用于调用工具的路径?需要能够调用 x64 或 x86 编译器、链接器等。
  • 选择编译器等不起作用。您在 IDE 中选择平台和配置,然后选择正确的工具和为该配置/平台设置的属性表。您确实有 Linker-General->Advanced->Target Machine 选项,但在使用 64 位时应该在属性表中设置。
  • 好的。我没有在问题中描述,但我首先提出的原因是:我们有一群开发人员使用 VC IDE 开发一个项目,但针对更新的 Platform SDK 进行构建。官方构建是脚本化的并且工作正常;开发人员希望使用 IDE 进行构建;我想要一种将 IDE 配置为指向 Platform SDK 的一站式方式,而无需每个开发人员手动执行此操作。属性表似乎是答案,但前提是它们允许我们设置所有必要的设置。现在我们使用 /useenv,它可以工作,但会强制您为 x64/x86 单独调用 IDE。
猜你喜欢
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 2011-03-01
  • 2019-01-23
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多