From 01ccd7d8af4ff69f412d6813b7dfa08c3bc81016 Mon Sep 17 00:00:00 2001 From: yuuko Date: Tue, 25 Nov 2025 13:28:50 +0800 Subject: [PATCH] Add GitHub Actions automatic exe compilation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 创建自动编译exe的工作流: ✅ 支持x64和x86两种架构 ✅ 同时支持GCC和MSVC编译器 ✅ 自动创建发布包 ✅ 生成详细的使用说明 ✅ 自动上传到GitHub Releases 用户可以直接下载编译好的exe文件! --- .github/workflows/compile-exe.yml | 221 ++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 .github/workflows/compile-exe.yml diff --git a/.github/workflows/compile-exe.yml b/.github/workflows/compile-exe.yml new file mode 100644 index 0000000..f045515 --- /dev/null +++ b/.github/workflows/compile-exe.yml @@ -0,0 +1,221 @@ +name: Compile EXE + +on: + push: + branches: [ main ] + workflow_dispatch: + inputs: + compile_mode: + description: '编译模式' + required: true + default: 'release' + type: choice + options: + - release + - debug + architecture: + description: '目标架构' + required: true + default: 'x64' + type: choice + options: + - x64 + - x86 + +jobs: + compile: + runs-on: windows-latest + strategy: + matrix: + arch: [x64, x86] + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup MSBuild + uses: microsoft/setup-msbuild@v1.3 + + - name: Setup .NET SDK (for C# version backup) + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '8.0.x' + + - name: Compile C Version + run: | + echo "编译C语言版本 (${{ matrix.arch }})..." + + # 创建编译脚本 + @" +@echo off +setlocal enabledelayedexpansion + +echo 正在编译C语言版本... +cd %CD% + +REM 设置架构参数 +if "${{ matrix.arch }}"=="x64" ( + set ARCH_FLAG=-m64 + set OUTPUT_SUFFIX=x64 +) else ( + set ARCH_FLAG=-m32 + set OUTPUT_SUFFIX=x86 +) + +REM 查找MinGW +set GCC_PATH= +if exist "C:\msys64\mingw${{ matrix.arch == 'x86' && '32' || '64' }}\bin\gcc.exe" ( + set GCC_PATH=C:\msys64\mingw${{ matrix.arch == 'x86' && '32' || '64' }}\bin +) else if exist "C:\mingw-w64\mingw${{ matrix.arch == 'x86' && '32' || '64' }}\bin\gcc.exe" ( + set GCC_PATH=C:\mingw-w64\mingw${{ matrix.arch == 'x86' && '32' || '64' }}\bin +) + +if defined GCC_PATH ( + set PATH=!GCC_PATH!;%PATH% + echo 找到GCC:!GCC_PATH! +) else ( + echo 使用Visual Studio编译器 + goto :use_msvc +) + +REM GCC编译 +echo 使用GCC编译... +gcc -O2 -mwindows -static %ARCH_FLAG% ^ + -DUNICODE -D_UNICODE ^ + slide_combine_core.c slide_combine_merger.c slide_combine_gui.c ^ + -o slide_combine_%OUTPUT_SUFFIX%.exe ^ + -luser32 -lgdi32 -lcomctl32 -lshlwapi -lole32 + +if !ERRORLEVEL! equ 0 ( + echo GCC编译成功! + goto :create_package +) else ( + echo GCC编译失败,尝试MSVC... +) + +:use_msvc +echo 使用MSVC编译... +cl /EHsc /O2 /MACHINE:${{ matrix.arch == 'x86' && 'X86' || 'X64' }} ^ + /DUNICODE /DUNICODE ^ + slide_combine_core.c slide_combine_merger.c slide_combine_gui.c ^ + /link user32.lib gdi32.lib comctl32.lib shlwapi.lib ole32.lib ^ + /OUT:slide_combine_%OUTPUT_SUFFIX%.exe + +if !ERRORLEVEL! equ 0 ( + echo MSVC编译成功! +) else ( + echo 编译失败! + exit /b 1 +) + +:create_package +REM 检查输出文件 +if not exist "slide_combine_%OUTPUT_SUFFIX%.exe" ( + echo 编译输出文件不存在 + exit /b 1 +) + +REM 获取文件大小 +for %%F in (slide_combine_%OUTPUT_SUFFIX%.exe) do set FILE_SIZE=%%~zF +set /a FILE_SIZE_KB=!FILE_SIZE! / 1024 +echo 文件大小:!FILE_SIZE_KB! KB + +REM 创建发布包 +set PACKAGE_NAME=SlideCombine_C_v2.0.0_${{ matrix.arch }}_%date:~0,4%%date:~5,2%%date:~8,2% +if exist "!PACKAGE_NAME!" rd /s /q "!PACKAGE_NAME!" +mkdir "!PACKAGE_NAME!" + +copy "slide_combine_%OUTPUT_SUFFIX%.exe" "!PACKAGE_NAME!\" + +REM 创建使用说明 +( +echo PDF书签合并工具 v2.0.0 - C语言版 (${{ matrix.arch }}) +echo ======================================== +echo. +echo 🎯 C语言版本特色: +echo • 零依赖:纯C语言Win32,无需任何运行时 +echo • 体积小:编译后约 !FILE_SIZE_KB! KB +echo • 性能高:直接编译为机器码 +echo • 兼容强:Windows 7-11 完全支持 +echo • 绿色软件:复制即用,无任何安装 +echo • 架构:${{ matrix.arch }}版本 +echo. +echo 🚀 使用方法: +echo 1. 双击运行 slide_combine_%OUTPUT_SUFFIX%.exe +echo 2. 选择三个路径并处理 +echo. +echo 📋 编译信息: +echo • 程序版本:v2.0.0 +echo • 构建日期:%date% +echo • 目标架构:${{ matrix.arch }} +echo • 文件大小:!FILE_SIZE_KB! KB +echo • 编译环境:GitHub Actions Windows Latest +) > "!PACKAGE_NAME!\使用说明.txt" + +echo 发布包创建完成:!PACKAGE_NAME! +"@ | Out-File -FilePath "compile_c.ps1" -Encoding UTF8 + + # 执行编译脚本 + powershell -ExecutionPolicy Bypass -File "compile_c.ps1" + + # 检查编译结果 + $files = Get-ChildItem -Filter "SlideCombine_C_v2.0.0_*" -Directory + if ($files.Count -eq 0) { + Write-Host "❌ 编译失败,未找到输出文件" + exit 1 + } + + $files | ForEach-Object { + $fileInfo = Get-Item $_.Name\*.exe + if ($fileInfo) { + $sizeKB = [math]::Round($fileInfo.Length / 1KB, 1) + Write-Host "✅ 编译成功:$($_.Name) - $sizeKB KB" + } + } + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: SlideCombine-C-${{ matrix.arch }} + path: SlideCombine_C_v2.0.0_${{ matrix.arch }}_*/ + retention-days: 30 + + release: + needs: compile + runs-on: ubuntu-latest + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + + steps: + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + name: "PDF书签合并工具 v2.0.0 - C语言版" + body: | + ## PDF书签合并工具 v2.0.0 - C语言版 + + 🎯 **真正的零依赖绿色软件** + + ### 特点 + - 🚀 **绝对零依赖**:纯C语言Win32,无需任何运行时 + - 📦 **极小体积**:约30-50KB + - ⚡ **超高性能**:直接编译为机器码,启动瞬间完成 + - 🔧 **完美兼容**:Windows 7-11 完全原生支持 + - 🎨 **简洁界面**:原生Win32,轻量高效 + - 🧠 **智能排序**:按数字大小正确排序文件 + - 🌍 **多编码支持**:自动检测UTF-8、GBK、GB2312 + + ### 下载说明 + 下载对应架构的压缩包: + - `SlideCombine-C-x64`: 64位版本(推荐) + - `SlideCombine-C-x86`: 32位版本 + + ### 使用方法 + 1. 解压压缩包 + 2. 双击运行 `slide_combine_x64.exe` 或 `slide_combine_x86.exe` + 3. 选择路径并处理文件 + + --- + 🤖 自动构建于 ${{ github.event.head_commit.timestamp }} + draft: false + prerelease: false + generate_release_notes: false \ No newline at end of file