我正在为使用Visual Studio 2010编译的Ruby库编写Ruby C扩展。(我无法改变这一点,或者重新编译我正在构建的Ruby核心,因为它嵌入在第三方应用程序中。)< / p>
我的项目从Visual Studio 2010开始,但后来我开始使用Visual Studio 2013而没有升级项目 - 所以它仍在使用VS2010工具包。
在我需要使用的Ruby include头中有一个检查:
#if _MSC_VER != 1600
#error MSC version unmatch: _MSC_VER: 1600 is expected.
#endif
现在,我想,因为我在我的项目中使用VS2010工具包,这个检查仍然会在VS2013中传递。这就是我困惑的地方:
解决方案构建并创建有效的.so
文件,输出中没有警告或错误,但我刚发现错误列表显示警告。智能感知将为1800
显示_MSC_VER
- 但它会编译。
1 IntelliSense: #error directive: MSC version unmatch: _MSC_VER: 1600 is expected. c:\Users\Thomas\Documents\subd\ThirdParty\include\ruby\win32\i386-mswin32_100\ruby\config.h 4
那么这里发生了什么?
当我的工具包设置为v100
时,Visual Studio是否使用VS2010编译器? (然后我希望_MSC_VER
为1600
。)
#warning
指令不是阻止编译器的东西吗?
IntelliSense是否未获取工具包版本,而是始终假设_MSC_VER
为1800
?
答案 0 :(得分:1)
_MSC_VER直接绑定到工具包,而不是IDE。
有缺陷的Intelisense在VS2012中也表现相同(使用Vs2010工具包)......