[英]Use Visual Studio 2012 and compile with older platform toolset?
[英]Visual Studio: How to use platform toolset as preprocessor directive?
我有两个平台工具集: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
error. 导致错误。
有关上下文,请参阅此类似问题: 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_ 。 无论平台工具集名称是v120_xp,VS2013都将定义相同的名称。
#if (_MSC_VER >= 1700) && defined(_USING_V110_SDK71_)
// working in XP-compatibility mode
#endif
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.