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