You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Linux环境下为Windows .exe文件设置图标(适用于GitHub Actions中Godot项目导出场景)

如何在Linux环境下为Windows .exe文件设置图标(适用于GitHub Actions中Godot项目导出场景)

我完全懂你的痛点——就为了给Godot导出的Windows exe加个图标,还要在GitHub Actions的Linux runner上折腾Wine,实在是小题大做,太麻烦了!好在现在有几个原生Linux工具能轻松搞定这个事儿,完全不用碰Wine,下面给你一步步讲清楚:

推荐方案1:用icoutils + binutils(系统原生包,最省心)

这是Linux生态里比较成熟的组合,两个工具都是发行版官方仓库里的,在GitHub Actions的Ubuntu runner上一键就能装,不用额外折腾预编译二进制或者外部依赖。

具体步骤:

  1. 安装依赖工具
    在Ubuntu/Debian系的runner上,直接用apt安装:
    sudo apt-get update && sudo apt-get install -y icoutils binutils
    
  2. 准备Windows兼容的ICO图标文件
    Windows的exe图标最好是包含多分辨率的ICO格式(比如16x16、32x32、64x64、256x256),这样在不同场景下(任务栏、文件管理器、快捷方式)都能显示清晰。如果你的图标还是PNG格式,用icotool一键转换:
    icotool -c assets/icon-16.png assets/icon-32.png assets/icon-64.png assets/icon-256.png -o build/app-icon.ico
    
    (把上面的PNG路径换成你实际的图标文件就行,想加更多分辨率也可以继续追加)
  3. 把图标嵌入Godot导出的exe
    用binutils里的objcopy直接修改exe的资源段,替换掉默认的Godot图标:
    objcopy --update-section .rsrc=build/app-icon.ico build/your-game.exe
    
    build/your-game.exe是Godot导出的exe路径,换成你自己的项目输出路径就行)

推荐方案2:用Go语言的rsrc工具(轻量跨平台)

如果你不想装系统级的工具包,或者需要更灵活的资源处理,可以用rsrc——这是个Go写的跨平台工具,原生支持Linux,没有多余的依赖。

具体步骤:

  1. 在Actions里安装Go并编译rsrc
    先安装Go环境,再通过Go模块编译rsrc:
    sudo apt-get install -y golang-go
    go install github.com/akavel/rsrc@latest
    
  2. 生成Windows资源文件
    用rsrc把ICO图标转换成Windows可识别的资源格式:
    $HOME/go/bin/rsrc -ico build/app-icon.ico -o app-res.syso
    
  3. 嵌入exe资源段
    还是用objcopy把生成的资源文件插入到exe中:
    objcopy --add-section .rsrc=app-res.syso build/your-game.exe
    

GitHub Actions完整Workflow片段

把上面的图标处理步骤整合到你的Godot导出流程里,大概是这样的:

jobs:
  build-windows:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # 这里是你现有的Godot安装和项目导出步骤
      - name: Set up Godot
        run: |
          # 替换成你实际的Godot安装逻辑,比如用官方Action或直接下载
      - name: Export Windows build
        run: godot --export "Windows Desktop" build/your-game.exe
      # 新增的图标处理步骤(用方案1的工具)
      - name: Install icon handling tools
        run: sudo apt-get update && sudo apt-get install -y icoutils binutils
      - name: Convert PNG to multi-resolution ICO
        run: icotool -c assets/icon-16.png assets/icon-256.png -o build/app-icon.ico
      - name: Embed icon into EXE
        run: objcopy --update-section .rsrc=build/app-icon.ico build/your-game.exe

实用小提示

  • 一定要用包含多分辨率的ICO文件,不然Windows在不同DPI的显示器上显示图标时可能会模糊
  • 如果你的Godot导出的exe已经有默认图标,objcopy --update-section会直接覆盖原来的资源,不需要额外删除旧图标
  • 这两个方案都是纯Linux原生操作,比装Wine快得多,完全适配GitHub Actions的CI/CD场景,不会浪费 runner 的时间

备注:内容来源于stack exchange,提问作者Cassiterite

火山引擎 最新活动