我想覆盖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属性表中唯一合法的东西吗?
答案 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:因为你发现它使用了不同的格式,所以你必须分别保留它们中的两个。