我必须使用MSVC2012和v100平台工具集(来自MSVC2010)构建项目。不幸的是,我在整个代码中使用C++11特性“基于范围”。我想知道是否有预处理器指令允许在编译时知道当前的平台工具集。I.e
#if (_MSC_PLATFORM_TOOLSET > 100)
# define ALLOW_RANGE_BASED_FOR 1
#else
# define ALLOW_RANGE_BASED_FOR 0
#endif我尝试使用_MSC_VER宏,但是对于这两个平台工具集,它都被设置为1700 (这是有意义的,因为我仍然在使用MSVC2012)。如果有任何建议我会很感激的。谢谢。
发布于 2013-07-29 19:23:59
对于每个平台工具集,以及Visual的版本,宏_MSC_FULL_VER是不同的。对于(当前) Visual 2013预览,它是180020617。对于Visual 2012和2012年11月的编译器CTP (它提供了一些C++11),它是170060315。与_MSC_VER一样,对于每个版本的Visual,前4个数字是相同的;对于Visual 2012,它们总是1700。下面是一个例子:
#ifdef _MSC_FULL_VER
#if _MSC_FULL_VER == 170060315
// MSVS 2012; Platform Toolset v110
#elif _MSC_FULL_VER == 170051025
// MSVS 2012; Platform Toolset v120_CTP_Nov2012
#elif _MSC_FULL_VER == 180020617
// MSVS 2013; Platform Toolset v120
#endif
#endif // _MSC_FULL_VER发布于 2016-09-06 13:51:58
我不知道他们是否已经在VS2015中修复了它,但是它确实能像预期的那样工作。
我创建了以下小程序:
#include <iostream>
using namespace std;
int main()
{
cout << "_MSC_VER: " << _MSC_VER << endl;
cout << "_MSC_FULL_VER: " << _MSC_FULL_VER << endl;
cout << "_MSC_BUILD: " << _MSC_BUILD << endl;
(void) getchar();
return 0;
}我为从VS2010到VS2015的每个平台版本添加了构建配置,而_MSC_VER与上述平台版本相对应--尽管总是在Visual 2015中在VS2015项目中构建它。
干杯,
伊恩
https://stackoverflow.com/questions/13794130
复制相似问题