首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual :如何以编程方式检查已使用的C++平台工具集

Visual :如何以编程方式检查已使用的C++平台工具集
EN

Stack Overflow用户
提问于 2012-12-10 02:20:23
回答 2查看 12.8K关注 0票数 15

我必须使用MSVC2012和v100平台工具集(来自MSVC2010)构建项目。不幸的是,我在整个代码中使用C++11特性“基于范围”。我想知道是否有预处理器指令允许在编译时知道当前的平台工具集。I.e

代码语言:javascript
复制
#if (_MSC_PLATFORM_TOOLSET > 100)
#   define ALLOW_RANGE_BASED_FOR 1
#else
#   define ALLOW_RANGE_BASED_FOR 0
#endif

我尝试使用_MSC_VER宏,但是对于这两个平台工具集,它都被设置为1700 (这是有意义的,因为我仍然在使用MSVC2012)。如果有任何建议我会很感激的。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。下面是一个例子:

代码语言:javascript
复制
#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
票数 10
EN

Stack Overflow用户

发布于 2016-09-06 13:51:58

我不知道他们是否已经在VS2015中修复了它,但是它确实能像预期的那样工作。

我创建了以下小程序:

代码语言:javascript
复制
#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项目中构建它。

干杯,

伊恩

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13794130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档