VS .props解析

 
在VS 2010项目文件夹中属性表文件的新的格式(.props)。Visual Studio 2010引入了用户设置文件(Microsoft.cpp.<Platform>.users.props)以控制包括全局搜索路径在内的全 局设置。这些文件位于$(USERPROFILE)\appdata\local\microsoft\msbuild\v4.0目录。同时,用户也可以 采用自定义的属性表文件来 保存对于相应的工程的设置。Visual Studio 2010不再支持在Tools->Options中设置VC + +目录。这样做的好处就是将属性设置独立出来,一次保存多个工程适用,配置方式更加灵活,用记事本就可以实现对项目的部署。当然,VS这么做也是为了方便 使用MSBuild命令行的用户可以在构建程序是使用用户自定义的宏(用户定义的宏是一个名称/值对,您可以用作项目生成时的变量)。

属 性表文件类似于其他MSBuild项目文件并可以被包含在其他项目文件或其他属性表文件中。项目系统创建的属性表通常只包 含<ItemGroup>元素定义项和元数据和<PropertyGroup>元素定义属性。以下示例展示了由IDE创建的被命 名为MyPropertySheet的属性表单文件。属性表中定义一个叫MyUserMacro的用户宏,其值为example。此外,当打开该项目时, 用户定义的宏将被添加到用户的环境变量中。在项目文件中,用户宏及其值由元素<MyUserMacro>表示。而将用户宏添加到环境变量的指 令是由<EnvironmentVariable>元素表示的:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" 
      xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ImportGroup Label="PropertySheets" />
   <PropertyGroup Label="UserMacros">
      <MyUserMacro>Example</MyUserMacro>
   </PropertyGroup>
   <PropertyGroup />
   <ItemDefinitionGroup />
      <ItemGroup>
         <BuildMacro Include="MyUserMacro">
            <Value>$(MyUserMacro)</Value>
            <EnvironmentVariable>true</EnvironmentVariable>
         </BuildMacro>
      </ItemGroup>
</Project>

上图是在配置了路径属性后得到的自定义属性表文件,其中<ExecutablePath>、<IncludePath>、<LibraryPath>、

<Link>、<AdditionalDependencies>  分别表示编译文件路径,头文件路径,库文件路径,以及在linker节点下的附加项。

刚 好,在打开.vcxproj文件时也看到相关的元素,其实也就是说,你也可以在项目文件里做相同的设置,但这个设置只可用于当前项目,项目文件的这些元素 自然也可以用属性表文件中的值来替换。其实,.vcproj 文件中大部分的属性组和项定义组(item definition groups )往往在Microsoft.Cpp.Default.props文件导入之后出现。同样地,所有的targets在项目文件的最后被导入。然后就会有多 个属性组并且以特定的顺序出现,每个属性组都以它们的Labels属性来区别。因为这些文件都是MSBuild文件,而MSBuild所认可的顺序是最后 出现的将替代之前旧有的作为编译变量。这样就保证了属性表文件中的参数不会影响到工程中其他项目的特定的设置。只有为进行特定设置的项目才会使用属性表文 件(.props文件)中项目的值。

例外需要额外说明的是,为什么属性表文件中只有<ItemGroup> 和<PropertyGroup>这两个元素,这是因为在MSBuild引擎需要通过<ItemGroup>指定被用于构建的 项,如需要的文件,启用什么可执行文件等等;<PropertyGroup>通常用于指定名称/值对来声明属性对于构建的作用,或一些必要的 参数,如文件路径,是否使用某一参数等等

最新文章

  1. Jmail组件-----发送email
  2. BulletedList使用及详解
  3. CSS常用的属性命名
  4. Android如何调用第三方SO库
  5. Python的列表排序
  6. JavaScript与DOM的关系
  7. PowerDesigner 的几个使用技巧
  8. iOS远程消息推送自我整理版
  9. 简单实现图片间的切换动画 主要用到ViewPager
  10. HDU 1312 Red and Black(DFS,板子题,详解,零基础教你代码实现DFS)
  11. PLECS_直流电机基本系统模型
  12. 再谈包访问权限 子类为何不能使用父类protected方法
  13. 【转】CENTOS/RHEL 7 系统中设置SYSTEMD SERVICE的ULIMIT资源限制
  14. python爬取post请求Reque Payload的json数据
  15. Chrome部分站点无法启用Flash问题
  16. (改进)Python语言实现词频统计
  17. 利用函数或映射进行数据转换 (map)
  18. Chrome nacl开启
  19. 黑客之google入侵网站常用方式 2
  20. ListView与Button共存问题

热门文章

  1. MyEclipse中如何安装插件(以Subclipse为例)[转]
  2. Rubinius 2.0 发布,Ruby 虚拟机
  3. MySQL数据库有外键约束时使用truncate命令的办法
  4. Lucene.net 实现近实时搜索(NRT)和增量索引
  5. AMD加载器实现笔记(三)
  6. java算法(二)
  7. 关于QCon2015感想与反思
  8. Java框架搭建-Maven、Mybatis、Spring MVC整合搭建
  9. Java程序员的日常—— IOUtils总结
  10. Visual Studio 2012系统环境变量设置(命令行)