多平台命令行工具的发布方法

最近,我用Rust写了一个命令行工具(Evian-Zhang/Wispha,也可以看我相关的知乎文章Wispha – 轻松展示项目结构布局)。得益于Rust自身的特性,这个命令行工具不需要更改代码,只需要在相应的平台上编译一遍,就可以实现多平台版本。相信许多个人开发者有和我类似的经历,开发了多平台的命令行工具以后,却不知道如何分发(distribute)自己的代码,GitHub releases里面只有几个平台的光秃秃的可执行文件。我经过一番搜索,发现网络上并没有完整的全面教程。因此,在我探索了很久之后,把在Windows, macOS, Debian/Ubuntu这三个平台上打包文件以进行分发的方法汇总到了这篇文章中。

在这篇文章中,就用我这次的项目举例吧。我的项目名字叫Wispha, 可执行文件叫wispha, 版本为v0.1.0, 我的用户名为Evian Zhang.

Windows

环境

Windows 10 1909, Visual Studio 2019

我们的目标是,把wispha.exe打包为一个以.msi为扩展名的Windows Installer Package. 打包的工具有很多,有微软自家推的配合Visual Studio的,也有第三方的如Wix, orca等。Wix是一款免费的开源打包工具,但是在最新的Windows上似乎并不太行(我自己安装的时候出现了对.NET framework 3.5这个老包的要求,GitHub上也有人提过issue)。而我个人也对第一方软件有执念,因此这里我主要介绍的是基于Visual Studio的微软自家的Microsoft Visual Studio Installer Projects.

首先,打开Visual Studio, 可以直接在扩展->管理扩展的Visual Studio Marketplace中搜到Microsoft Visual Studio Installer这个扩展。下载、安装并重启Visual Studio之后,在创建新项目中就可以看到一个叫Setup Project的项目模板。

在这里插入图片描述

我们把这个项目命名为wispha-installer, 就可以创建如图所示的项目了。

在这里插入图片描述
首先,我们需要在解决方案资源管理器中单击wispha-installer以在下方的属性栏中设置其杂项。将Author和Manufacturer设置为Evian Zhang, ProductName设置为wispha, Version设置为0.1.0, TargetPlatform设置为x64.

在这里插入图片描述
然后,我们就可以注意到主体窗口了。我们可以看到,File System on Target Machine下默认有三个文件夹:Application Folder, User’s Desktop, User’s Programs Menu. 我选择的是Application Folder, 它会在安装者的C:\Program Files\Evian Zhang\wispha\目录下安装我们的可执行文件。如果需要在别的地方安装,也可以右键File System on Target Machine, Add special Folders里面添加对应的文件夹。具体的文件夹可以参看官方文档。

我们右键Application Folder, 在Add选项中选择文件。然后选择我们的wispha.exe加入进去即可。

在这里插入图片描述

然后,我们就可以直接生成我们的wispha-installer.msi了。

最后说一句,这个Windows Installer Package虽然是官方的工具,但竟然不能提供全部的msi功能,比如说在安装时修改PATH变量等功能。这些功能,似乎只能用第三方工具如orca等完成。

macOS

鉴于macOS上App Store的尿性,我只能放弃第一方工具,使用第三方的包管理器homebrew.

首先,我们要将可执行文件wispha打包:

tar -czf wispha-darwin.tar.gz wispha

同时,我们要求一下生成的wispha-darwin.tar.gz的哈希值留作后用:

shasum -a 256 wispha-darwin.tar.gz

这里生成的哈希值为a294901a60afc94095a1118472393626c38a213201c4dafb70b220c7945384b4.

接下来,我们要在GitHub的仓库里放一个含有wispha-darwin.tar.gz的release. 然后,我们就可以通过https://github.com/Evian-Zhang/Wispha/releases/download/v0.1.0/wispha-darwin.tar.gz来下载这个包了。

接着,我们要在GitHub上创建一个名为homebrew-wispha的仓库。在这个仓库里新建一个目录Formula, 在其中增加文件wispha.rb:

# Documentation: https://docs.brew.sh/Formula-Cookbook
#                https://rubydoc.brew.sh/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class Wispha < Formula
    desc "A commandline tool for easily displaying project layout written in Rust"
    homepage "https://github.com/Evian-Zhang/Wispha"
    url "https://github.com/Evian-Zhang/Wispha/releases/latest/download/wispha-darwin.tar.gz"
    sha256 "a294901a60afc94095a1118472393626c38a213201c4dafb70b220c7945384b4"
    version "0.1.0"
  
    def install
      bin.install "wispha"
    end
  end

就大功告成了。

用户可以通过

brew tap Evian-Zhang/Wispha
brew install wispha

来管理、安装我们的软件。

Debian/Ubuntu

和Windows类似,我们的目标是打包成一个以.deb结尾的包。

首先,我们要新建一个以下目录结构:

wispha
├── DEBIAN
│   └── control
└── usr
    └── bin
        └── wispha

其中wispha/usr/bin/wispha就是我们的可执行文件,而control的内容如下:

Package: wispha
Architecture: all
Maintainer: Evian Zhang
Version: 0.1.0
Description: A commandline tool for easily displaying project layout

然后,我们使用

dpkg-deb --build wispha

就可以得到想要的wispha.deb文件啦。

参考文献

[1] https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/2kt85ked(v%3dvs.100)

[2] https://federicoterzi.com/blog/how-to-publish-your-rust-project-on-homebrew/

[3] https://www.debian.org/doc/debian-policy/ch-controlfields.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值