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

时间:2014-09-12 14:27:34

标签: windows visual-studio visual-studio-2012

我最近在Visual Studio中encountered Property Sheets提供了一种为项目定义用户定义的$(MACRO)的方法。他们不是what I really want但是到目前为止我能在VS中找到最接近的人。

但是,在属性管理器(查看 - >其他Windows - > Property Manager)下,除非您编辑特定的内容,否则似乎无法显示配置编辑器的“用户宏”部分配置/平台组合,如Debug | Win32

如果您有相当多的配置,并希望(比方说)将宏设置为同一平台上所有配置的相同值,则会很快变得麻烦。

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

有没有办法一次为多个配置/平台设置属性表中的值?例如,考虑您要为x64目标设置宏POSTGRES_INSTALL%PROGRAMFILES%\PostgreSQL\9.3,为x86目标设置%PROGRAMFILES(x86)%\PostgreSQL\9.3,是否有任何方法可以为多个目标执行此操作(Debug,Release) ,SomeCustomTarget)同时?

1 个答案:

答案 0 :(得分:14)

属性表如何工作

属性表是简单的属性列表。参赛作品不是按配置或按平台进行的。

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

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

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

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

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

使用示例,代码

作为一个例子,你可以download from pg_sysdatetime on github here,我创建了三个属性表:

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

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

属性编辑器如下所示:

VS Properties Manager

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

Properties page showing macros

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

 $(PGBASEDIR)\lib

没有关心我是否正在进行32位或64位构建等等。所以我可以编辑"所有配置","所有平台&#34的设置;并且知道他们将为所有事情工作,我不必单独编辑每一个。

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