Qt源码二次编译报错:CMake调用多版本Windows SDK冲突
错误原因及解决思路
这个错误的核心是Windows SDK版本冲突,同时伴随编译缓存过期问题,和你修改的代码无关,具体原因如下:
- 多版本Windows SDK同时被引入:你的系统中安装了两个不同版本的Windows 10 SDK(10.0.26100.0和10.0.22621.0),本次编译时VS 2019的命令行环境同时加载了两个版本的头文件路径,导致
corecrt.h被重复包含,其中的_CrtEnableIf模板被多次定义。 - 编译缓存过期混乱:数月未操作后,之前编译生成的CMake/Ninja缓存记录的SDK路径与当前环境不匹配,即使回改代码,缓存里的旧路径配置依然会导致编译时头文件查找逻辑出错。
- 环境变量被意外修改:可能期间系统的
INCLUDE环境变量被改动,加入了另一个SDK版本的路径,打乱了头文件的查找顺序。
解决步骤
清理编译缓存
进入你之前执行configure.bat的Qt源码编译目录,删除CMakeCache.txt文件和CMakeFiles文件夹,彻底清除旧的编译配置缓存。统一Windows SDK版本
- 打开VS 2019 Installer,进入修改界面,只保留一个你需要的Windows 10 SDK版本(比如10.0.22621.0),卸载多余版本。
- 或者在命令行工具中手动指定SDK版本:
执行后再重新运行set WindowsSdkVersion=10.0.22621.0ninja。
检查环境变量
打开命令行执行echo %INCLUDE%,查看输出的路径中是否同时存在两个SDK的include目录,若有则删除多余的路径,确保只有一个SDK版本的路径被包含。重新初始化编译环境
关闭当前的命令行窗口,重新以管理员身份打开Admin x64 Native Tools Command Prompt for VS 2019,确保环境变量干净,再进入编译目录执行ninja。
内容的提问来源于stack exchange,提问作者Lillo
相关产品推荐
相关产品推荐

