tauri 在Ubuntu 下直接打包出 Windows 的 .exe

3 阅读4分钟

在 Ubuntu 下直接打包出 Windows 的 .exe 文件是可行的,但这是 Tauri 的一个实验性功能,官方文档称其为“最后的手段”。

这意味着配置步骤要比在 Windows 上复杂不少,但如果不想配置虚拟机或 CI/CD 流水线,可以严格按照下面的步骤来操作。

⚠️ 重要提示

  • 仅支持 NSIS:此方法只能生成 .exe 安装包,无法生成 .msi 安装包(后者只能在 Windows 上构建)。
  • 签名问题:在 Ubuntu 上交叉编译时,无法对 Windows 程序进行代码签名。因此生成的 .exe 文件在用户下载运行时,可能会触发 Windows 的“未知发布者”安全警告,这不影响程序运行,但体验稍差。
  • 适用版本:以下步骤适用于 Tauri v1.3 及以上版本。请确认你项目的 src-tauri/Cargo.toml 中 Tauri 依赖版本是否满足要求。如果版本落后较多,请先参考 依赖项更新指南 进行更新。

🛠️ 详细配置步骤

1. 安装必要的系统软件

打开终端,执行以下命令来安装 NSIS 安装程序制作工具以及 LLVM 链接器工具链。

# 更新软件包列表并安装 NSIS, LLD, LLVM
sudo apt update
sudo apt install nsis lld llvm

2. 添加 Windows 编译目标

Rust 默认只编译当前系统的程序,我们需要为它添加 Windows 的编译目标。

# 添加 64位 Windows 编译目标
rustup target add x86_64-pc-windows-msvc

3. (核心步骤) 安装 Windows 开发依赖库

这一步是成功编译的关键。Rust 编译 Windows 程序需要 Windows 的 SDK。我们需要借助 xwincargo-xwin 工具来获取这些依赖。

推荐方式:使用 cargo-xwin (操作更简单)

cargo-xwin 是一个能自动处理 SDK 下载和配置的 Cargo 工具,它能大大简化我们的操作流程。

# 安装 cargo-xwin
cargo install --locked cargo-xwin

这个方法最省心,它会自动处理好后续的配置,你可以直接跳到最后一步“执行构建”。

备选方式:手动配置 xwin (更可控)

如果你想更深入地了解配置过程,可以手动操作。

# 安装 xwin 工具
cargo install xwin

# 使用 xwin 下载并解压 Windows SDK 到用户目录下的 .xwin 文件夹
xwin splat --output ~/.xwin

注意xwin splat 命令可能会因符号链接问题而失败。如果遇到错误,可以尝试在后面加上 --disable-symlinks 参数后再运行一次,即 xwin splat --output ~/.xwin --disable-symlinks

下载完成后,你需要在项目根目录下创建 .cargo/config.toml 文件(如果目录不存在则手动新建),来告诉 Rust 编译器去哪里寻找 SDK 以及使用哪个链接器。

.cargo/config.toml

[target.x86_64-pc-windows-msvc]
linker = "lld"
rustflags = [
  # 请务必把 /home/你的用户名 替换成你自己的实际 Home 路径
  "-Lnative=/home/你的用户名/.xwin/crt/lib/x86_64",
  "-Lnative=/home/你的用户名/.xwin/sdk/lib/um/x86_64",
  "-Lnative=/home/你的用户名/.xwin/sdk/lib/ucrt/x86_64"
]

请一定记得替换 rustflags 中的路径!

4. 执行构建

一切就绪后,就可以开始为 Windows 打包了。在项目根目录下运行:

如果选择了推荐方式 (cargo-xwin)

npm run tauri build -- --runner cargo-xwin --target x86_64-pc-windows-msvc

如果选择了备选方式 (xwin)

npm run tauri build -- --target x86_64-pc-windows-msvc

构建成功后,你的 Windows 安装程序(一个 .exe 文件)就会出现在 src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/ 目录下。

💡 还有更简单的选择吗?

如果你觉得以上步骤有些繁琐,或者担心实验性功能的稳定性,这里有两条官方推荐的“捷径”:

  1. 使用 GitHub Actions (最推荐):如果你不介意将代码托管在 GitHub 上,这是最简单、最专业的方式。Tauri 官方提供了预置的 Action,可以一键配置好环境,同时为你编译出 Windows、macOS 和 Linux 三端的安装包。你只需要写一个简单的配置文件,后续工作全由 GitHub 的免费服务器自动完成。

  2. 在虚拟机中编译:如果你更喜欢图形界面操作,可以在 Ubuntu 上通过 VirtualBox 或 VMware 安装一个 Windows 虚拟机。在纯净的 Windows 环境里,使用官方的 tauri build 命令进行打包,过程会顺利得多,这也是最无痛的本地打包方案。