【问题标题】:Visual Studio: How to use platform toolset as preprocessor directive?Visual Studio:如何使用平台工具集作为预处理器指令?
【发布时间】:2014-04-24 20:30:39
【问题描述】:

我有两个平台工具集:v110 和 v110_xp 用于我的项目,根据选择的平台,我想包含/排除要编译的部分代码。

_MSC_FULL_VER$(PlatformToolsetVersion) 对于这两个平台工具集具有完全相同的值。或者,我尝试使用$(PlatformToolset),如下所示:

_MSC_PLATFORM_TOOLSET=$(PlatformToolset)

但问题是$(PlatformToolset) 不是数字。想知道如何将这个非数字值用作预处理器指令?

尝试了几种解决方案我发现

_MSC_PLATFORM_TOOLSET='$(PlatformToolset)'

然后

#if (_MSC_PLATFORM_TOOLSET=='v110')
  [Something]
#endif

工作正常,但是

#if(_MSC_PLATFORM_TOOLSET == 'v110_xp')
  [SomethingElse]
#endif

导致“字符常量中的字符过多”错误。

有关上下文,请参阅此类似问题: Visual Studio: how to check used C++ platform toolset programmatically

【问题讨论】:

    标签: c++ visual-studio-2012 preprocessor-directive project-properties


    【解决方案1】:

    转到project properties -> C/C++ -> Preprocessor 并将以下内容添加到Preprocessor Definitions

    _MSC_PLATFORM_TOOLSET_$(PlatformToolset)

    那么你可以这样写:

    #ifdef _MSC_PLATFORM_TOOLSET_v110
       [Something]
    #endif
    
    #ifdef _MSC_PLATFORM_TOOLSET_v110_xp
       [SomethingElse]
    #endif
    

    这在 VS2010 中适用于我。

    【讨论】:

      【解决方案2】:

      对于 VS 2012/2013,如果您使用向后兼容工具集,_USING_V110_SDK71_ 将可供您使用。 VS2013 将定义相同的名称,与平台工具集名称无关,即 v120_xp。

      #if (_MSC_VER >= 1700) && defined(_USING_V110_SDK71_)
          // working in XP-compatibility mode
      #endif
      

      【讨论】:

        猜你喜欢
        • 2016-06-03
        • 1970-01-01
        • 1970-01-01
        • 2020-08-14
        • 2017-07-28
        • 2019-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多