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

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

然而,在属性pipe理器(查看 – >其他窗口 – >属性pipe理器)下,似乎没有可能让configuration编辑器的用户macros部分显示,除非编辑特定的configuration/平台组合,如Debug | Win32 Debug | Win32

如果你有相当多的configuration,并且想要(比如说)为同一个平台上的所有configuration设置一个相同的macros值,这会很麻烦。

通常在编辑项目属性时,您可以select“所有configuration”和/或“所有平台”以将更改复制到子部分。 这在编辑属性页时不可用。

有没有办法一次为多个configuration/平台设置属性表中的值? 考虑一下,例如,你想为x64目标和%PROGRAMFILES(x86)%\PostgreSQL\9.3设置一个macrosPOSTGRES_INSTALL%PROGRAMFILES%\PostgreSQL\9.3 %PROGRAMFILES(x86)%\PostgreSQL\9.3为x86目标,是否有任何方法可以为多个目标debugging,发布,SomeCustomTarget)在同一时间?

属性表如何工作

属性表是简单的属性列表。 条目不是每个配置或每个平台。

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

因此所有的属性都可以在所有配置/平台变体中看到。

这意味着你也可以做一些事情,比如对于所有的x86配置有一张表,对于所有的x64配置有不同的表,比如对于构建路径。 通过这种方式,代码中的所有其他属性都可以使用$(MYLIB_INCLUDE)而不用担心它是32位还是64位版本。

您可以将每个配置/平台和全局属性表有用地组合起来,属性表可以在列表中进一步引用。 (顺序是重要的,他们似乎是根据UI从下到上阅读)。

您可以通过在主项目属性页面中编辑属性来检查属性的最终值,然后打开“宏>”选项卡。 使用一个用户宏引用另一个表单中的另一个用户宏时,这非常有用。

使用示例,使用代码

作为一个例子,你可以从这里的github上的pg_sysdatetime下载 ,我创建了三个属性表:

  • pg_sysdatetime.props是用户可以编辑以更改路径的主表。 它将PGBASEDIR_x86PGBASEDIR_x64宏定义为系统上安装32位和64位PostgreSQL的路径。

  • pg_sysdatetime_x86.props是一个简单的包装,它将PGBASEDIR定义为$(PGBASEDIR_x86)

  • pg_sysdatetime_x64.props对于$(PGBASEDIR_x64)

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

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

属性编辑器如下所示:

VS属性管理器

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

显示宏的属性页面

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

  $(PGBASEDIR)\lib 

而不必关心我是在做一个32位或64位版本等,所以我可以编辑“所有配置”,“所有平台”的设置,并知道他们会为一切工作,我不必须单独编辑每一个。

这几乎就像从1980年使用Makefile 😉