使用 Visual Studio 2013 编译 Windows XP 的可执行程序

最近在开发一个小工具,需要支持 OS X 和 Windows 两个平台。于是乎使用了 CMakeCLion 来开发,其实也就是觉得好玩。

其中 Windows 的开发环境为 Windows 7 SP1 + Visual Studio 2013,编译出来的程序使用都很正常,然而同样的可执行文件放到 Windows XP 会提示无效的 Win32 应用程序。经过搜索发现,是因为 Windows XP 使用比较旧的 Windows 7.1 SDK,而 Vista 以后默认都不再支持。要支持的话,网上有几种方法,一个就是使用工程文件,指定 Toolchain 为 v120_xp。这种方式网上广为流传,很可惜的是,我用的不是工程文件,而是 CMake 生成的 Makefile 文件,这种方式不适用。

后来仔细搜索了很多资料后发现,其实对于我的项目,只需要修改链接参数便可:

1
2
3
if (MSVC)
set_target_properties(ProjectName PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:CONSOLE,5.01")
endif (MSVC)

增加了上述设置到 CMake 后,编译出来的程序可以正常在 Windows XP 下运行。其中的 5.01 对应的应该是 Windows 2000 / XP 的 32 位系统。

部分参考文献: