【问题标题】:In Visual Studio projects, can a user macro be set across multiple configurations/platforms?在 Visual Studio 项目中,是否可以跨多个配置/平台设置用户宏?
【发布时间】:2014-09-12 14:27:33
【问题描述】:

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

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

如果您有很多配置,并且想要(例如)为同一平台上的所有配置设置一个宏为相同的值,那么这很快就会变得很麻烦。

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

有什么方法可以同时为多个配置/平台在属性表中设置值?考虑一下,例如,您想为 x64 目标设置宏 POSTGRES_INSTALL 到 %PROGRAMFILES%\PostgreSQL\9.3 和为 x86 目标设置 %PROGRAMFILES(x86)%\PostgreSQL\9.3,有什么方法可以同时为多个目标(Debug、Release、SomeCustomTarget)执行此操作时间?

【问题讨论】:

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


    【解决方案1】:

    属性表的工作原理

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

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

    因此,所有属性在所有配置/平台变体中都是可见的。

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

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

    您可以通过在主项目属性页面中编辑属性,然后打开“宏>”选项卡来检查属性的最终值。这在调试一个用户宏从不同工作表引用另一个用户宏的排序问题时很有用。

    使用示例,附代码

    例如,您可以download from pg_sysdatetime on github here,我创建了三个属性表:

    • pg_sysdatetime.props 是用户可以编辑以更改路径的主表。它定义了 PGBASEDIR_x86 和 PGBASEDIR_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 平台配置。

    属性编辑器如下所示:

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

    现在我可以使用简单的宏从项目中的任何位置引用 PostgreSQL libdir、包含目录等:

     $(PGBASEDIR)\lib
    

    不关心我是在做 32 位还是 64 位构建等等。所以我可以编辑“所有配置”、“所有平台”的设置,并且知道它们适用于一切,我不必单独编辑每一个。

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

    【讨论】:

    • @jdlugosz 重新讨论了关于属性函数的讨论,认为这对于在没有大量重复编辑的情况下合理管理配置可能会很有趣。
    • 是的,我早期使用属性页是为整个构建套件设置东西。我看到它们适用于所有配置,并且它们本身被有条件地包含在每个配置中。使用不同的工作表来调试和发布差异很烦人。现在我正在直接编辑 XML,我可以在属性页中编写条件条目来自动执行我想要的操作。
    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 2016-10-01
    • 2015-12-08
    • 1970-01-01
    相关资源
    最近更新 更多