9

我有两个平台工具集: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:如何以编程方式检查使用的 C++ 平台工具集

4

2 回答 2

8

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

于 2014-04-24T21:05:01.523 回答
4

For VS 2012/2013, if you use backwards-compatibility toolset, _USING_V110_SDK71_ will be available for you to use. VS2013 will define same name, regardless of platform toolset name, which is v120_xp.

#if (_MSC_VER >= 1700) && defined(_USING_V110_SDK71_)
    // working in XP-compatibility mode
#endif
于 2014-08-19T18:30:46.343 回答