From 2cddfb098f6cf54a54e2812e1070bf238bb4d20e Mon Sep 17 00:00:00 2001 From: Weicao-CatilGrass <1992414357@qq.com> Date: Mon, 9 Mar 2026 15:21:43 +0800 Subject: Add build script to compile and copy Windows GUI executable --- build.rs | 57 ++++++++++++++++++++++++++++++++++++++++++++++ gui/win32/CMakeLists.txt | 12 +++++----- gui/win32/cbuild.ps1 | 2 +- gui/win32/scripts/run.ps1 | 2 +- gui/win32/src/butck_gui.rc | 14 ------------ gui/win32/src/butckg.rc | 14 ++++++++++++ 6 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 build.rs delete mode 100644 gui/win32/src/butck_gui.rc create mode 100644 gui/win32/src/butckg.rc diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..d69d05e --- /dev/null +++ b/build.rs @@ -0,0 +1,57 @@ +fn main() { + #[cfg(target_os = "windows")] + build_win32_gui(); +} + +fn build_win32_gui() { + use std::fs; + use std::path::{Path, PathBuf}; + use std::process::Command; + use std::str::FromStr; + + const EXE_NAME: &str = "butckg.exe"; + + let crate_root = env!("CARGO_MANIFEST_DIR"); + let build_script = Path::new(crate_root).join("gui\\win32\\scripts\\build.ps1"); + + let status = Command::new("powershell") + .arg("-ExecutionPolicy") + .arg("Bypass") + .arg("-File") + .arg(&build_script) + .status() + .expect("Failed to execute build script"); + + if !status.success() { + eprintln!( + "Warning: Build script failed with exit code: {:?}", + status.code() + ); + return; + } + + let exe_path = Path::new(crate_root) + .join("gui\\win32\\build\\bin") + .join(EXE_NAME); + if exe_path.exists() { + let out_dir = std::env::var("OUT_DIR").unwrap(); + let out_dir_path = PathBuf::from_str(&out_dir).unwrap(); + let target_dir = out_dir_path + .parent() + .unwrap() + .parent() + .unwrap() + .parent() + .unwrap(); + + let dest_path = target_dir.join(EXE_NAME); + if let Err(e) = fs::copy(&exe_path, &dest_path) { + eprintln!( + "Warning: Failed to copy executable to build directory: {}", + e + ); + } + } else { + eprintln!("Warning: Executable not found at: {:?}", exe_path); + } +} diff --git a/gui/win32/CMakeLists.txt b/gui/win32/CMakeLists.txt index 2fc5f79..7afcf9a 100644 --- a/gui/win32/CMakeLists.txt +++ b/gui/win32/CMakeLists.txt @@ -1,30 +1,30 @@ cmake_minimum_required(VERSION 3.10) -project(butck_gui VERSION 1.0.0 LANGUAGES C RC) +project(butckg VERSION 1.0.0 LANGUAGES C RC) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) enable_language(RC) -add_executable(butck_gui WIN32 +add_executable(butckg WIN32 src/main.c - src/butck_gui.rc + src/butckg.rc ) if(WIN32) - target_compile_definitions(butck_gui PRIVATE + target_compile_definitions(butckg PRIVATE UNICODE _UNICODE _WIN32_WINNT=0x0A00 ) - target_link_libraries(butck_gui + target_link_libraries(butckg user32 gdi32 comctl32 ) endif() -set_target_properties(butck_gui PROPERTIES +set_target_properties(butckg PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) diff --git a/gui/win32/cbuild.ps1 b/gui/win32/cbuild.ps1 index 85a7d54..a15289f 100644 --- a/gui/win32/cbuild.ps1 +++ b/gui/win32/cbuild.ps1 @@ -15,6 +15,6 @@ switch ($args[0]) { "clean" { Clean } "run" { Build; Run } default { - Write-Host "Usage: .\mgr.ps1 [build|clean|run]" + Write-Host "Usage: .\cbuild.ps1 [rebuild|clean|run]" } } diff --git a/gui/win32/scripts/run.ps1 b/gui/win32/scripts/run.ps1 index a8f50e8..7ebc2f7 100644 --- a/gui/win32/scripts/run.ps1 +++ b/gui/win32/scripts/run.ps1 @@ -2,7 +2,7 @@ $originalLocation = Get-Location $scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path Set-Location $scriptPath -$exePath = "..\build\bin\butck_gui.exe" +$exePath = "..\build\bin\butckg.exe" if (Test-Path $exePath) { & $exePath } diff --git a/gui/win32/src/butck_gui.rc b/gui/win32/src/butck_gui.rc deleted file mode 100644 index a609d9d..0000000 --- a/gui/win32/src/butck_gui.rc +++ /dev/null @@ -1,14 +0,0 @@ -#include "windows.h" -#include "resource.h" - -IDR_MAINMENU MENU -BEGIN - POPUP "Files(&F)" - BEGIN - MENUITEM "Exit(&X)", IDM_EXIT - END - POPUP "Help(&H)" - BEGIN - MENUITEM "About(&A)...", IDM_ABOUT - END -END diff --git a/gui/win32/src/butckg.rc b/gui/win32/src/butckg.rc new file mode 100644 index 0000000..a609d9d --- /dev/null +++ b/gui/win32/src/butckg.rc @@ -0,0 +1,14 @@ +#include "windows.h" +#include "resource.h" + +IDR_MAINMENU MENU +BEGIN + POPUP "Files(&F)" + BEGIN + MENUITEM "Exit(&X)", IDM_EXIT + END + POPUP "Help(&H)" + BEGIN + MENUITEM "About(&A)...", IDM_ABOUT + END +END -- cgit