当你要在Windoge上编译的时候,你将面临的是巨大而易碎的Visual Studio、混沌与冲突的Unix/Linux/POSIX模拟器、无尽的版本地狱(不仅仅是DLL)。现在,你多了一个选择:花费50个提交来调试GitHub Actions的环境。
以下说明编写于2022年8月,可以正确编译适用于32位Windows的Aseprite v1.2.39。没有64位版本是因为懒。Linux和macOS用户自行编译很方便,不用采用下面的方法。
- 创建一个私有仓库。
- 找到并单击创建新文件。
- 在文件名框中粘贴下列内容:.github/workflows/a.yml。
- 在内容框中粘贴下列内容,然后确定。
name: a on: workflow_dispatch: jobs: a: runs-on: windows-latest steps: - uses: actions/checkout@v2 - name: a shell: bash run: | SKIAVERSION="$(curl https://api.github.com/repos/aseprite/skia/releases/latest | jq -r .tag_name)" VERSION="$(curl https://api.github.com/repos/aseprite/aseprite/releases/latest | jq -r .tag_name)" mkdir -p a b c curl -LO "https://github.com/aseprite/aseprite/releases/download/$VERSION/Aseprite-$VERSION-Source.zip" unzip -qo Aseprite-$VERSION-Source.zip -d a curl -LO "https://github.com/aseprite/skia/releases/download/$SKIAVERSION/Skia-Windows-Release-x86.zip" unzip -qo Skia-Windows-Release-x86.zip -d c cd b # Aseprite不支持在Windows上用g++编译,PATH中的MinGW会干扰CMake判断。因为找不到对应的Chocolatey包来卸,故以暴力手段处理,反正主机是一次性的。 for i in c++ cpp gcc g++ cc ar as ld nm ranlib windres gfortran make mingw32-make ccache do while rm -v $(which $i) do : done done cat <<'EOF' > b.bat for /f "usebackq delims=" %%i in (`vswhere.exe -latest -property installationPath`) do call "%%i\VC\Auxiliary\Build\vcvars32.bat" cmake -DSKIA_DIR=..\c -DSKIA_LIBRARY_DIR=..\c\out\Release-x86 -DSKIA_LIBRARY=..\c\out\Release-x86\skia.lib ^ -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLAF_BACKEND=skia -G Ninja ..\a ninja aseprite EOF cmd.exe /c b.bat 7z a a.7z bin git add a.7z git -c user.email=@ -c user.name=a commit -m a git push
- 该文件指定名为“a”的工作流包含名为“a”的任务,从GitHub上下载最新版本的Aseprite和魔改版Skia,干掉系统自带的MinGW,并按INSTALL.md中的说明配置和编译。
- GitHub Actions提供的机器已预装许多工具和软件包,如7z、cl、cmake、Windows SDK,只是为了避免冲突而往往不在搜索路径中。上列脚本用vswhere找到并启用预装的MSVC,不必花时间下载开发环境。
- 在Actions选项卡中选择刚创建的工作流,手动运行。
- 如果找不到Actions选项卡,是因为GitHub Actions在仓库中被禁用,可在仓库设置中启用。
- 对于免费账户的私有仓库,Actions使用限额为每月2000分钟,Windows主机用时加倍计。
- 等待约20分钟。生产的压缩包将出现在Code选项卡中名为b的文件夹。