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

Ser*_*hii 13 preprocessor multiplatform visual-c++

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

#if (_MSC_PLATFORM_TOOLSET > 100)
#   define ALLOW_RANGE_BASED_FOR 1
#else
#   define ALLOW_RANGE_BASED_FOR 0
#endif
Run Code Online (Sandbox Code Playgroud)

我尝试使用_MSC_VER宏,但对于两个平台工具集,它设置为1700(这确实有意义,因为我仍在使用MSVC2012).我很感激任何建议.谢谢.

Peo*_*are 18

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

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

添加_MSC_PLATFORM_TOOLSET = $(PlatformToolsetVersion)以使Visual Studio将当前Toolset的版本集成到预处理器中,以便查询

#if (_MSC_PLATFORM_TOOLSET > 100)
...
#endif
Run Code Online (Sandbox Code Playgroud)

终于可以了.


use*_*370 9

_MSC_FULL_VER每个平台工具集的宏都不同; 和Visual Studio的版本.对于(当前)Visual Studio 2013预览,它是180020617.对于带有2012年11月编译器CTP的Visual Studio 2012(给出了一些C++ 11),它是170060315.比如_MSC_VER,每个Visual Studio版本的前4位数都是相同的; 对于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
Run Code Online (Sandbox Code Playgroud)


小智 5

在使用Visual Studio开发C或C++时,我确实需要知道两个版本号.这些是Visual Studio主要版本号,以及"cl"编译器主要/次要版本.

Visual Studio版本号显示在"关于"对话框中.例如,对于VS2012,我看到"版本11.0.60610.01",因此主版本号为"11".

bakefileCMake这样的构建工具将创建针对Visual Studio主要版本的解决方案文件.

编译器"major/minor"版本是_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;
}
Run Code Online (Sandbox Code Playgroud)

正如评论所说,你必须使用你想要测试的编译器来编译它.为了省去你的麻烦,这里有一张小桌子:

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

希望这可以帮助!

  • 不,没有。`_MSC_VER` 是 IDE 的版本,而不是目标平台工具集的版本。您可以通过指定“Platform Toolset = v100”在 VS 2015 中使用 2010 编译器进行编译 (2认同)