VC++2013选"Visual Studio 2013 - Windows XP (v120_xp)"会发生什么?
会发生:
1. include 路径,lib路径的 inherted value ,从 $(WindowsSdk_IncludePath) 变为 $(WindowsSdk_71A_IncludePath)
2. c/c++ ,command line 增加 /D "_USING_V110_SDK71_"
3. 在 linker 选项中,改为 /SUBSYSTEM:WINDOWS",5.01", 5.01是 xp的windows版本号
从上述可知,你若要在 vs2013上编译c++ 工程,让这个工程编译后的执行文件,能在 xp操作系统上运行,可以选择 platform toolset 为 "Visual Studio 2013 - Windows XP (v120_xp)" ,经过这样选择,那么sdk的头文件,库文件,都指向了 sdk 7.1,而不再是vs2013自带的 sdk 8.1.
sdk7.1是支持 xp系统的最后一个 sdk
注意,要确保sdk7.1 的 头文件和库文件路径生效,一定要在设置 platform toolset 后,同时勾选inherited defaults, 如果显式指定的路径中,凡含有 $(WindowsSdk_IncludePath) 的,都删除!
选择 Visual Studio 2013 - Windows XP (v120_xp)后,改变的仅仅是sdk 路径,而vs 2013的编译器,c/c++ 头文件,运行库,包括ATL 都不会改。这样安排非常妙,比如,你可以将在vc6++ 的工程,迁移到 vs2013,这样编译的时候,能用一些c++ 11的新特性,又同时能确保在 xp上运行。
_USING_V110_SDK71_ 目的是影响 vs2013 ATL 的代码,该实现对 8.1 sdk和 7.1 sdk区别对待。