在Visual Studio项目中,是否可以跨多个配置/平台设置用户宏?

Cra*_*ger 16 windows visual-studio visual-studio-2012

我最近在Visual Studio中遇到过Property Sheets,它提供了一种$(MACRO)为项目定义用户定义的方法.它们不是 我真正想要的,但是到目前为止我能在VS中找到最接近的.

但是,在属性管理器(View - > Other Windows - > Property Manager)下,除非您编辑特定的配置/平台组合,否则似乎无法显示配置编辑器的User Macros部分Debug | Win32.

如果您有相当多的配置并且想要(例如)将宏设置为同一平台上所有配置的相同值,则会变得非常麻烦.

通常编辑项目属性时,可以选择"所有配置"和/或"所有平台"以将更改复制到子节.编辑属性表时,这不可用.

有没有办法一次为多个配置/平台设置属性表中的值?举个例子,要宏设置POSTGRES_INSTALL%PROGRAMFILES%\PostgreSQL\9.3针对x64目标和%PROGRAMFILES(x86)%\PostgreSQL\9.3用于x86目标,有没有办法做到这一点的多重目标(调试,发布,SomeCustomTarget)在同一时间?

Cra*_*ger 14

属性表如何工作

属性表是简单的属性列表.条目不是按配置或按平台.

如果将属性表添加到项目的顶层,则会将其添加到下面的所有配置/平台组合中,就像您自己将该属性表文件单独添加到每个配置一样.

因此,所有配置/平台变体都可以看到所有属性.

这意味着您还可以执行诸如为所有x86配置创建一个工作表和为所有x64配置创建不同工作表(例如,用于构建路径)之类的操作.这样,代码中的所有其他属性都可以使用,$(MYLIB_INCLUDE)而不必担心它是32位还是64位构建.

您可以有用地组合每个配置/平台和全局属性表,属性表也可以在列表中进一步引用.(顺序很重要,根据用户界面似乎从下到上阅读).

您可以通过在主项目属性页面中编辑属性来检查属性的最终值,并使用Tab键打开"宏>"选项卡.当调试一个用户宏从另一个工作表引用另一个宏的排序问题时,这非常有用.

使用示例,包含代码

作为一个例子,您可以在github上下载pg_sysdatetime,我创建了三个属性表:

我添加pg_sysdatetime.props到项目的顶层,因此它适用于所有配置/平台组合.

然后sysdatetime_x86.props,我添加到所有x86平台配置和sysdatetime_x64.props所有x64平台配置.

属性编辑器如下所示:

VS Properties Manager

我可以在编辑属性时看到正确定义的宏:

显示宏的属性页面

现在我可以使用简单的宏从我项目的任何地方引用PostgreSQL libdir,include目录等:

 $(PGBASEDIR)\lib
Run Code Online (Sandbox Code Playgroud)

没有关心我是否正在进行32位或64位构建等等.所以我可以编辑"所有配置","所有平台"的设置,并知道它们将适用于所有内容,我不知道必须单独编辑每一个.

这几乎就像使用1980年的Makefile ;-)