.qmake.stash文件由谁生成、何时生成?跨编译缺失该文件报错如何解决
.qmake.stash 生成逻辑说明
.qmake.stash 是 qmake 内置的配置缓存文件,用于存储单次 qmake 运行时检测到的编译器路径、依赖库版本、全局编译配置等环境信息,避免每次构建都重复执行全套环境检测逻辑,提升配置效率。
生成时机与触发环节
- 该文件由 qmake 自身生成,无额外前置依赖环节。只有当 qmake 完整跑完环境检测、确认所有配置有效后,才会自动将检测到的配置写入构建目录下的 .qmake.stash 文件。
- 只要构建目录下存在有效 .qmake.stash 文件,且项目配置没有触发重检测的变更,后续 qmake 运行时都会直接读取缓存的配置,不会重新生成文件,这也是你观察到文件生成时间很早的原因。
- 在 Visual Studio + Qt VS Tools 配合 WSL 交叉编译的场景下,qmake 执行的触发时机为:你第一次切换到对应编译配置(如你场景中的 RelArm64)启动构建,或是手动触发项目右键菜单中的「执行 qmake」操作时,Qt VS Tools 会调用 WSL 环境下对应架构的 qmake 二进制,在配置的中间输出目录(即你提到的
$(IntDir)路径)下执行配置操作,检测成功后自动生成 .qmake.stash。
你遇到的问题根因
第二个项目无法生成 .qmake.stash,本质是 qmake 的环境检测流程没有跑完就报错中断了,还没到生成缓存文件的步骤:
- 第一个项目能正常构建,说明你的 WSL 交叉编译工具链本身配置是正确的
- 第二个项目 qmake 报找不到 aarch64 编译器,大概率是该项目的
.pro文件内的交叉编译相关配置(如QMAKE_CXX、QMAKE_LINK等参数)和第一个项目不一致,或是该项目的 Qt VS Tools 配置中指定的交叉编译套件和第一个项目不同,导致 qmake 调用的编译器路径不存在,检测流程中断,自然不会生成 .qmake.stash。
你手动复制第一个项目的缓存文件能正常构建,是因为缓存文件中已经存储了正确的编译器等配置,qmake 直接跳过了环境检测步骤,用缓存配置生成 Makefile,属于临时规避方案,后续如果配置变更需要重新生成缓存时还是会报错。
永久修复方案
- 右键点击构建失败的项目,选择「执行 qmake」,查看输出面板的完整报错信息,确认 qmake 调用的 aarch64 编译器路径和 WSL 环境下的实际路径是否匹配
- 对比两个项目的
.pro文件内容、以及项目属性 -> Qt Project Settings 中的编译套件、WSL 配置项,确保两个项目使用同一套交叉编译配置 - 确认配置一致后,清空失败项目的中间输出目录,重新执行 qmake,即可自动生成正确的 .qmake.stash 文件。
内容的提问来源于stack exchange,提问作者w.a.r.p
相关产品推荐
相关产品推荐

