Visual Studio:如何使用平台工具集作为预处理器指令

Visual Studio: How to use platform toolset as preprocessor directive?

本文关键字:预处理 处理器 指令 工具集 平台 Studio 何使用 Visual      更新时间:2023-10-16

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

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

_MSC_PLATFORM_TOOLSET=$(PlatformToolset)

但问题是CCD_ 4是非数字的。我想知道如何使用这个非数值作为预处理器指令?

尝试几种解决方案我发现

_MSC_PLATFORM_TOOLSET='$(PlatformToolset)'

然后

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

工作正常,但

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

导致"字符常量中的字符太多"错误。

关于上下文,请参阅这个类似的问题:Visual Studio:如何以编程方式检查使用的C++平台工具集

转到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中对我有效。

对于VS 2012/2013,如果使用向后兼容性工具集,则可以使用_USING_V110_SDK71_。VS2013将定义相同的名称,而不管平台工具集的名称是v120_xp。

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