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.
在项目属性中
添加_MSC_PLATFORM_TOOLSET = $(PlatformToolsetVersion)以使Visual Studio将当前Toolset的版本集成到预处理器中,以便查询
#if (_MSC_PLATFORM_TOOLSET > 100)
...
#endif
Run Code Online (Sandbox Code Playgroud)
终于可以了.
_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".
像bakefile或CMake这样的构建工具将创建针对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
希望这可以帮助!