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

hag*_*agh 8 c++ project-properties preprocessor-directive visual-studio-2012

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

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

_MSC_PLATFORM_TOOLSET=$(PlatformToolset)
Run Code Online (Sandbox Code Playgroud)

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

尝试了几种解决方案,我发现了这一点

_MSC_PLATFORM_TOOLSET='$(PlatformToolset)'
Run Code Online (Sandbox Code Playgroud)

然后

#if (_MSC_PLATFORM_TOOLSET=='v110')
  [Something]
#endif
Run Code Online (Sandbox Code Playgroud)

工作正常但是

#if(_MSC_PLATFORM_TOOLSET == 'v110_xp')
  [SomethingElse]
#endif
Run Code Online (Sandbox Code Playgroud)

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

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

Kir*_*ale 7

转到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
Run Code Online (Sandbox Code Playgroud)

这在VS2010中适用于我.