msvc设置目标平台windows版本
【摘要】 MSVC 里“目标 Windows 版本”其实分两层:编译时用什么 Windows SDK,以及程序允许使用哪些版本的 Windows API。前者决定头文件、库、WinRT API 是否可见;后者决定 windows.h 暴露哪些 API。1. Visual Studio 项目:改 Windows SDK 版本打开项目属性:项目 → 属性 → 配置属性 → 常规修改:Windows SDK...
MSVC 里“目标 Windows 版本”其实分两层:编译时用什么 Windows SDK,以及程序允许使用哪些版本的 Windows API。前者决定头文件、库、WinRT API 是否可见;后者决定 windows.h 暴露哪些 API。
1. Visual Studio 项目:改 Windows SDK 版本
打开项目属性:
项目 → 属性 → 配置属性 → 常规
修改:
- Windows SDK 版本 / Windows Target Platform Version
- 可选:Target Platform Min. Version / WindowsTargetPlatformMinVersion
对应 .vcxproj 里的属性是:
<WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.17763.0</WindowsTargetPlatformMinVersion>
也可以右键解决方案或项目,选择 “重定目标解决方案 / Retarget projects”,在下拉框里选择已安装的 SDK 版本。
2. 命令行 cl:用 /D 控制最低 Windows 版本
如果只是想让代码按某个 Windows 版本编译,设置预处理器宏即可:
cl /D_WIN32_WINNT=0x0601 /DWINVER=0x0601 main.cpp
或者在项目属性里:
C/C++ → 预处理器 → 预处理器定义
添加:
_WIN32_WINNT=0x0601
WINVER=0x0601
也可以在头文件里定义,但要注意放在 #include <windows.h> 或 #include <sdkddkver.h> 之前:
#define WINVER 0x0601
#define _WIN32_WINNT 0x0601
#include <windows.h>
3. CMake:用 CMAKE_SYSTEM_VERSION
set(CMAKE_SYSTEM_VERSION 10.0.26100.0)
或者命令行:
cmake -DCMAKE_SYSTEM_VERSION=10.0.26100.0 ..
对于 C++ 项目,也可以直接在 .vcxproj 或生成器层面设置 WindowsTargetPlatformVersion。
4. 常用版本宏值
| 目标系统 | 宏值 |
|---|---|
| Windows 7 | 0x0601 |
| Windows 8 | 0x0602 |
| Windows 8.1 | 0x0603 |
| Windows 10 / 11 | 0x0A00 |
5. 几个容易踩坑的点
- SDK 版本 ≠ 最低运行系统版本。 SDK 决定编译时能看到哪些 API;真正限制运行时兼容性的是
_WIN32_WINNT、WINVER和TargetPlatformMinVersion。 - 如果你用了新 SDK,但
_WIN32_WINNT设得较低,某些新 API 会被头文件隐藏。 - 如果你把
_WIN32_WINNT设得很高,但实际要在旧系统上运行,调用新 API 前必须做运行时检查。 - 现代 MSVC / Windows SDK 通常最低支持到 Windows 7 SP1;更老的 Windows 95/98/ME/NT/2000 已经不支持。
- 如果你是在做小体积、少依赖的 MSVC 构建,
_WIN32_WINNT本身不会直接影响 vcruntime 依赖;控制 CRT 依赖主要看/MT、/MD、UCRT 链接方式这些选项。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)