【问题标题】:How do I create my own defined constants based on the "Configuration Manager"?如何根据“配置管理器”创建自己定义的常量?
【发布时间】:2011-04-28 05:26:15
【问题描述】:

当我选择“调试”配置时,DEBUG 常量处于活动状态。当我选择“发布”配置时,DEBUG 常量处于非活动状态。

如何创建自己的配置,以便它们包含我自己定义的常量。基本上,我希望这样,如果我选择配置“FOOBAR”,我的项目中就有一个常量FOOBAR 处于活动状态。

我基本上是尽量避免在我的项目中加入一堆#define FOO,然后在我需要/不需要它们时评论/取消评论它们。

【问题讨论】:

    标签: visual-studio configuration constants c-preprocessor


    【解决方案1】:

    这是一个非常古老的问题,但这是你在 VS2013 中的做法。

    在项目属性中添加一个常量对我不起作用

    打开项目的 .csproj 文件,找到您的配置名称,然后在“DefineConstants”部分添加一些内容。

      <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'BO4_Production|AnyCPU'">
        <OutputPath>bin\BO4_Production\</OutputPath>
        <DefineConstants>TRACE;BUSINESS_OBJECTS_4</DefineConstants>
        <Optimize>true</Optimize>
        <DebugType>pdbonly</DebugType>
        <PlatformTarget>AnyCPU</PlatformTarget>
        <ErrorReport>prompt</ErrorReport>
        <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
        <Prefer32Bit>false</Prefer32Bit>
      </PropertyGroup>
    

    在这个例子中,每当我在 VS2013 中并将我的配置更改为“BO4_Production”时,源代码将立即反映这一点,任何部分都会反映这一点:

    #if BUSINESS_OBJECTS_4
        //  This is the URL of the Business Objects 4 REST services
        string BaseURL = "http://BO3Server:6405/biprws/logon/long");    
    #else
        //  This is the URL of the Business Objects 3 web services
        string BaseURL = "http://BO3Server:8080/dswsbobje/services/Session";
    #endif
    

    奇怪的是,这似乎是让#define 启动的唯一方法,只需更改配置即可。

    几个月后...

    实际上,放弃它。即使在 VS2015 中,我也可以在“构建”选项卡或直接在 .csproj 文件中添加条件符号,但我的解决方案中的某些项目只是弄错了。例如,他们定义了我的符号,对于该配置,不应该定义它。 (我检查了配置管理器窗口,所有设置都正确,但 VS2015 有时只是不正确..)

    【讨论】:

    • 可能是因为修改配置不会强制重新编译文件,您会发现自己在某些文件中定义了符号,但在其他文件中没有定义?
    【解决方案2】:

    下面我总结了如何创建 新的构建配置(比如 TEST_BUILD除了调试/发布构建 以及如何在新的构建配置下定义条件编译

    转到构建 -> 配置管理器 -> 选择“新建” -> 输入 TEST_BUILD 然后从 -> Empty -> 按 OK 选择复印设置。

    • 您必须在此处为解决方案文件下的每个项目手动配置所有新设置。
    • 除了 TEST_BUILD 特定的构建设置之外,您还可以将调试或发布构建设置复制到新的 TEST_BUILD。

      第 1 步:将现有设置复制到新的构建配置中:
      从 -> 复制设置 -> 按 OK。 [或]
      从 -> 复制设置 -> 按 OK。

      第 2 步:定义宏:

      转到属性 -> 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> 定义/添加 TEST_BUILD

      第 3 步:使用宏 TEST_BUILD 启用/禁用部分代码

    【讨论】:

      【解决方案3】:

      根据this article,您可以在项目属性的构建选项卡中定义编译常量。

      已编辑:要定义构建配置,您可以转到构建>配置管理器,我认为您也可以在那里定义编译常量。

      【讨论】:

      • 嗯,好的。但是有一个问题,您如何定义多个常量?基本上,分隔符是什么?
      • @myermian:我会试试分号;
      • 分隔符是,,而不是;。所以你需要输入FOO,BAR来设置FOOBAR常量。
      猜你喜欢
      • 2020-07-29
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多