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

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

在字符常量中使用太多字符会导致"too many character in character constant"错误。
有关上下文,请参见类似的问题: Visual Studio:如何以编程方式检查使用的C++平台工具集
2个回答

8

打开 项目属性 -> C/C++ -> 预处理器,并将以下内容添加到预处理器定义中:

_MSC_PLATFORM_TOOLSET_$(PlatformToolset)

然后你就可以编写类似这样的代码:

#ifdef _MSC_PLATFORM_TOOLSET_v110
   [Something]
#endif

#ifdef _MSC_PLATFORM_TOOLSET_v110_xp
   [SomethingElse]
#endif

这对我在VS2010中有效。


4

对于使用向后兼容工具集的VS 2012/2013,_USING_V110_SDK71_ 可供您使用。无论平台工具集名称是什么,VS2013都将定义相同的名称v120_xp。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接