codecamp

Tauri 实验性功能:在 Linux 和 macOS 上构建 Windows 应用程序

Tauri v1.3 新增了一种基于 NSIS 安装程序框架的新 Windows 安装程序类型。与 WiX 不同,NSIS 本身也可以在 Linux 和 macOS 上运行,这使得在非 Windows 主机上构建许多 Tauri 应用程序成为可能。请注意,这目前被认为是高度实验性的,可能不适用于每个系统或每个项目。因此,只有在本地虚拟机或 GitHub Actions 等 CI 解决方案不适用时,才应将其视为最后的选择。

由于 Tauri 官方仅支持 MSVC Windows 目标,设置稍微复杂一些。

首先,请确保所有 Tauri 依赖项至少是 1.3 版本,如果不确定如何操作,请查看依赖项更新指南。

Install NSIS

一些 Linux 发行版在它们的软件仓库中提供了 NSIS,例如在 Ubuntu 上,您可以通过运行以下命令来安装 NSIS:

Ubuntu

sudo apt install nsis

但在许多其他发行版中,您必须自行编译 NSIS,或手动下载未包含在发行版二进制包中的存根和插件。例如,Fedora 只提供二进制文件,但没有提供存根和插件:

Fedora

sudo dnf in mingw64-nsis
wget https://github.com/tauri-apps/binary-releases/releases/download/nsis-3/nsis-3.zip
unzip nsis-3.zip
sudo cp nsis-3.08/Stubs/* /usr/share/nsis/Stubs/
sudo cp -r nsis-3.08/Plugins/** /usr/share/nsis/Plugins/

在 macOS 上,您需要使用 Homebrew 安装 NSIS:

macOS

brew install nsis

Install LLVM and the LLD Linker

由于默认的 Microsoft 链接器仅在 Windows 上工作,因此我们还需要安装新的链接器。为了编译用于设置应用程序图标等内容的 Windows 资源文件,我们还需要 LLVM 项目的一部分,即 llvm-rc 二进制文件。

Ubuntu

sudo apt install lld llvm

macOS

brew install llvm

在 macOS 上,还需要将 /opt/homebrew/opt/llvm/bin 添加到您的 $PATH 中,如在安装输出中建议的那样。

Install the Windows Rust target

假设您要构建适用于 64 位 Windows 系统的应用程序:

rustup target add x86_64-pc-windows-msvc

Install the Windows SDKs

为获取 msvc 目标所需的 Windows SDK,我们将使用 xwin 项目:

cargo install xwin

然后,您可以使用 xwin 命令行工具将所需的文件安装到您选择的位置。请记住这个位置,因为我们将在下一步中需要它。在本指南中,我们将在主目录中创建一个名为 .xwin 的目录。

xwin splat --output ~/.xwin

如果出现以下错误消息而失败:

Error: failed to splat Microsoft.VC.14.29.16.10.CRT.x64.Desktop.base.vsix

Caused by:
0: unable to symlink from .xwin/crt/lib/x86_64/LIBCMT.lib to libcmt.lib
1: File exists (os error 17)

您可以尝试将 --disable-symlinks 标志添加到命令中:

xwin splat --output ~/.xwin --disable-symlinks

要使 Rust 编译器使用这些文件,首先需要在项目中创建一个 .cargo 目录,并在其中创建一个名为 config.toml 的文件,内容如下。请确保根据您的实际情况更改路径。

.cargo/config.toml

[target.x86_64-pc-windows-msvc]
linker = "lld"
rustflags = [
"-Lnative=/home/username/.xwin/crt/lib/x86_64",
"-Lnative=/home/username/.xwin/sdk/lib/um/x86_64",
"-Lnative=/home/username/.xwin/sdk/lib/ucrt/x86_64"
]

请记住,此文件特定于您的机器,因此如果您的项目是公开的或将与他人共享,我们不建议将其提交到 git。

Building the App

现在,只需将目标添加到 tauri build 命令中即可:

  • npm
npm run tauri build -- --target x86_64-pc-windows-msvc
  • Yarn
yarn tauri build --target x86_64-pc-windows-msvc
  • pnpm
pnpm tauri build --target x86_64-pc-windows-msvc
  • Cargo
cargo tauri build --target x86_64-pc-windows-msvc

The build output will then be in target/x86_64-pc-windows-msvc/release/bundle/nsis/.


Tauri 使用说明
Tauri 你无法改进衡量不了的东西
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Tauri 指南

Tauri 特性

Tauri 插件

Tauri 应用程序接口

Tauri JavaScript/TypeScript

Tauri 命令行界面

Tauri 进程

Tauri 参考

Tauri WebView 版本

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }