Visual Studio 2013的Visual C++编译器标志以针对XP操作系统

3
我想用Visual Studio 2013创建一个针对XP环境的C++程序,我知道可以在项目属性 -> 配置选项卡中使用UI选项来设置平台工具集为Windows v120_xp,但我希望能够使用命令行选项实现。请问如何操作?
对于Visual Studio 2012,我知道可以使用以下选项:
set CL=/D_USING_V110_SDK71_;%CL%
我正在寻找在Visual Studio 2013中类似的选项。请您帮忙吗?
1个回答

6
_USING_V110_SDK71_宏与将程序构建为与XP兼容无关,这只是一个副作用。关键选项是链接器选项/SUBSYSTEM。请注意,此选项允许您指定主要和次要子系统版本号。如果将此选项设置为5,1,则您的程序仅可在XP上运行。从VS2012开始,默认设置为6,0,这是当前一代Windows的版本号。运行此类程序需要Vista或更高版本。

实际上,这是一个相当重要的问题,降低版本号会在Windows中打开一些应用程序兼容性shim,这些shim旨在处理宣布不知道现代Windows版本的程序。特别是Aero关于窗口度量的谎言,旨在允许古老的程序仍然具有粗壮的窗口边框。

CRT也受到影响,涉及线程和本地化相关的相当模糊的细节。当然需要测试。请记住支持这种古老操作系统的成本。

最后但并非最不重要的,您还需要使用适当的SDK版本。 最后一个与XP兼容的版本是v7.1。 如果您从命令行构建,则会得到8.1,您需要首先设置%WindowsSdkDir%环境变量来解决此问题。 并且您需要在包含Windows.h的头文件中设置目标Windows版本,希望是预编译头文件。 将_WIN32_WINNT定义为0x501以匹配XP并避免意外使用不可在XP上使用的winapi函数。

看起来 Visual Studio 2013 安装程序实际上也会安装最新的 SDK,具体来说是 7.1A 版本。除非你需要从 Windows SDK 中获取特定内容,否则 VS 2013 就足够了。 - John Leidegren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接