You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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,属于临时规避方案,后续如果配置变更需要重新生成缓存时还是会报错。

永久修复方案

  1. 右键点击构建失败的项目,选择「执行 qmake」,查看输出面板的完整报错信息,确认 qmake 调用的 aarch64 编译器路径和 WSL 环境下的实际路径是否匹配
  2. 对比两个项目的 .pro 文件内容、以及项目属性 -> Qt Project Settings 中的编译套件、WSL 配置项,确保两个项目使用同一套交叉编译配置
  3. 确认配置一致后,清空失败项目的中间输出目录,重新执行 qmake,即可自动生成正确的 .qmake.stash 文件。

内容的提问来源于stack exchange,提问作者w.a.r.p

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:18:01