VS项目属性页 Property page 与属性管理器 Property manager 中配置关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nothinglefttosay/article/details/45445399

在新建工程时,总是会有配置路径、链接库、生成目标等问题,这可以通过修改项目属性配置来达到目的。

VS 中在一个项目上我们可以通过项目的属性页(Project Property page)来修改项目相关属性,也可以通过修改属性管理器(Property Manager)中的相关内容(Microsoft.Cpp.Win32.user Property page etc.)来修改项目相关属性。本文意在说明他们之间的区别与联系。


项目文件是文件扩展名为 .vcxproj 的 XML 文件。 所有在 IDE 中设置的属性直接写入项目文件或生成时导入的属性表中。

设置项目属性
1. 在菜单栏上,依次选择“项目”、“属性”。 或者在“解决方案资源管理器”或“属性管理器”中,鼠标在项目上右键(注意不是在项目名称下面的 Debug 或 Release 文件夹上),然后选择“属性”。 此时将打开项目的“属性页”对话框。
2. 在对话框顶部的框中,选择要应用设置的配置和平台。
若要创建或修改出现在“配置”框中的配置,请选择“配置管理器”按钮。
3. 设置属性值。 选择“确定”按钮后,新值就会写入项目文件(.vcxproj)。

具体设置可以参考:

MSDN 说明 使用项目属性

vs2010项目属性配置


共享可重用的属性配置

如果你经常需要建立某一类工程,在这一类工程中经常使用相同的“属性集”,例如建立 OpenCV 类工程时需要将库目录加入到搜索路径,则可以使用“属性管理器”(Property Manager)在可重用的属性表文件中设置属性,文件的扩展名为 .props。

你可以将一张或多张属性表应用于新项目,这样就不必从零开始设置属性。 若要访问“属性管理器”,在菜单栏中选择“视图”、“属性管理器”。

如果选择“添加新项目属性表”,然后进行选择(例如 MyProps.props 属性表),将显示属性页对话框。 请注意,这个属性页对话框适用于 MyProps 属性表,你所做的任何更改都将写入表 (.props) 中,而非工程文件 (.vcxproj) 中。
如果直接在 .vcxproj 文件中设置同一属性,属性表中的属性将被覆盖。 
你可以工程需要导入各种属性表。 一个解决方案中的多个项目可从同一个属性表继承设置,一个项目可有多个表。 属性表自身可以从另一个属性表继承设置。

需要注意的是:由于 .props 文件不作为项目项创建,因此该文件默认不参与源代码管理(.vcxproj 是创建工程时默认就有的)。 如果你希望将文件加入源代码管理,则可以手动添加文件作为解决方案项。

创建属性表
1. 在菜单栏上,依次选择“查看”、“属性管理器”。 此时将打开“属性管理器”。
2. 若要定义属性表的范围,选择属性表适用的项(可以是 Debug、Release 或者整个项目,也可能是一个编译器自带的特殊配置,例如 Microsoft.Cpp.Win32.user,Application 等,或另一个之前倒入、建立的属性表)。 打开该项的右键菜单,然后选择“添加新项目属性表”。 指定一个名称和位置。
3. 在“属性管理器”中,打开新的属性表然后设置要包括的属性。
这里面属性表从结构上分层分级管理,创建属性表需要照准需要应用的范围。编译器自带的特殊配置文件如 Microsoft.Cpp.Win32.user 位于 <userprofile>\AppData\Local\Microsoft\MSBuild\v4.0\ folder 中,是一个全局的属性表,是每次新建工程都会加入的。MSDN 中对这个文件特别提到:

我们不再推荐这些文件,因为它们是针对每个用户、每台计算机来设置项目配置属性的。 特别是如果你在生成计算机上面向多个平台,此类“全局”设置会影响生成。 例如,如果你同时拥有一个 MFC 项目和 Windows Phone 项目,则其中一个项目的 .user 属性将会无效。 可重用的属性表更为灵活,而且更加可靠。
尽管 Visual Studio 仍安装 .user 文件并参与属性继承,但默认情况下,这些文件为空。 最佳做法是删除项目在“属性管理器”中的引用,以确保项目按每个计算机设置和每个用户独立运行。这对确保在 SCC(源代码管理)环境中的正确行为来说非常重要。


那么可以这么说:

1. 项目文件是项目建立时就建立的,是扩展名为 .vcxproj 的 XML 文件,作用域是本项目;

2. 属性管理器中除了系统定义的在系统目录下的配置文件外可以自行添加属性页/表,扩展名是 .props 的 XML 文件;

3. 自定义属性表作用优先级是较项目文件 .vcxproj 低的,也就是说设置同一属性,属性表中的属性将被覆盖。


多重属性之间的继承关系:

项目属性已分层。 每层继承前一层的值,但是继承的值可以通过设置属性显式重写。 这是基本的继承树:
1. 来自 MSBuild CPP 工具集的默认设置(..\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.Default.props,由 .vcxproj 文件导入。) 
2. 属性表 
3. .vcxproj 文件。(可能重写默认设置和属性页设置。) 
4. 项元数据

在属性页中:在属性页中,黑体字显示的属性在当前上下文中定义。 普通字体的属性将被继承。


Visual C++ 项目系统基于 MSBuild虽然可以直接在命令行上编辑 XML 项目文件和属性表,我们仍建议你使用 IDE,在你修改参与继承的属性时,这一点尤为重要。Visual C++ 项目系统不一定可以识别在 MSBuild 中有效的手动编辑文件,在生成过程中可能产生细微错误。

项目文件是文件扩展名为 .vcxproj 的 XML 文件。 所有在 IDE 中设置的属性直接写入项目文件或生成时导入的属性表中。


在创建可重用的属性配置时,通过添加用户定义宏可以很好的解决一些问题:

Visual Studio - Where to define custom path macros?

Add User Macro Dialog Box

MSDN:

你可以创建用户定义的宏,以便在项目生成中将宏用作变量。 例如,可以创建一个用户定义的宏来提供自定义生成步骤或自定义生成工具的值。 用户定义的宏是名称/值对。 在项目文件中,使用 $(name) 表示法访问该值。
用户定义的宏存储在属性表中。 如果你的项目尚未包含属性表,请按照中的步骤创建一个属性表。
创建用户定义的宏
1. 在“属性管理器”窗口中(在菜单栏上,依次选择“视图”、“属性管理器”),打开属性表的快捷菜单(名称以 .user 结尾),然后选择“属性”。 此时将打开该属性表的“属性页”对话框。
2. 在对话框的左窗格中,选择“用户宏”。 在右窗格中,选择“添加宏”按钮,打开“添加用户宏”对话框。
3. 在对话框中,指定宏的名称和值。 (可选)选中“将此宏设置为生成环境中的环境变量”复选框。

这样就可以避免去定义系统变量,避免为了某类工程而去修改系统设置。


相关参考:

https://msdn.microsoft.com/zh-cn/library/669zx6zc.aspx

https://msdn.microsoft.com/zh-cn/library/bb651788.aspx





阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页