Visual Studio中:如何检查使用C ++平台编程工具集(Visual Studio: ho

2019-08-03 18:43发布

我必须建立使用MSVC2012和V100平台工具集(从MSVC2010)项目。 不幸的是我使用的整个代码C ++ 11功能“ 为基础的范围 ”。 我想知道如果有一个预处理指令,允许知道编译时当前的平台工具集。 即

#if (_MSC_PLATFORM_TOOLSET > 100)
#   define ALLOW_RANGE_BASED_FOR 1
#else
#   define ALLOW_RANGE_BASED_FOR 0
#endif

我试图使用_MSC_VER宏,但对于这两个平台的工具集将其设置为1700(这有一定道理,因为我仍在使用MSVC2012)。 我会很感激的任何建议。 谢谢。

Answer 1:

_MSC_FULL_VER是为每个平台工具集不同; 和Visual Studio的版本。 对于(电流)的Visual Studio 2013预览,它是180020617 。 对于Visual Studio 2012与2012年11月编译CTP(这给了一些C ++ 11),它是170060315 。 像_MSC_VER ,前4位是用于Visual Studio的每个版本是相同的; 为Visual Studio 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


Answer 2:

我遇到了同样的问题,并添加自己的预处理器定义为_MSC_PLATFORM_TOOLSET
在项目属性

  • C / C ++
  • 预处理器
  • 预处理定义

添加_MSC_PLATFORM_TOOLSET = $(PlatformToolsetVersion)使Visual Studio中的当前工具的版本整合到预处理器,使您的查询

#if (_MSC_PLATFORM_TOOLSET > 100)
...
#endif

将最终工作。



Answer 3:

有迹象表明,我真正需要知道的Visual Studio开发C或C ++时,两个版本号。 这些都是在Visual Studio主版本号,而“瘦肉精”的编译器的主要/次要版本。

在Visual Studio版本号显示在“关于”对话框。 例如,对于VS2012我看到“版本11.0.60610.01”,所以主版本号是“11”。

构建像工具bakefile或CMake的将创建针对一个Visual Studio主要版本的解决方案文件。

编译器“主要/次要”的版本是_MSC_VER宏的值。 这里有一个小程序,将显示此:

#include <stdio.h>
/*
 * Compile and run this on a Visual Studio platform to get
 * the version identifier.
 */
#define PRINT_INT_MACRO(m) (printf("%s: \"%d\"\n", #m, m))

int
main() {
    PRINT_INT_MACRO(_MSC_VER);
      return 0;
}

正如评论说,你必须实际上要测试的编译器编译。 为了节省您的麻烦,这里是一个小表:

Name    Version  _MSC_VER
VS 6        6.0      1200
VS 2002     7.0      1300
VS 2003     7.1      1310
VS 2005     8.0      1400
VS 2008     9.0      1500
VS 2010    10.0      1600
VS 2012    11.0      1700
VS 2013    12.0      1800
VS 2015    13.0      1900

希望这可以帮助!



Answer 4:

我不知道他们是否在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对应到平台版本以上 - 尽管总是在VS2015项目建设它在Visual Studio 2015年。

干杯,

伊恩



文章来源: Visual Studio: how to check used C++ platform toolset programmatically