diff --git a/Makefile b/Makefile index 5f8ab71..3a1184b 100755 --- a/Makefile +++ b/Makefile @@ -3,12 +3,13 @@ # SPDX-License-Identifier: GPL-3.0-or-later # -------------------------------------------------------------- # Build File : Makefile -# File Authors : Aoran Zeng -# Contributors : Yangmoooo -# | sanchuanhehe -# | +# File Authors : Aoran Zeng +# Contributors : Yangmoooo +# | sanchuanhehe +# | Mikachu2333 +# | # Created On : <2023-08-28> -# Last Modified : <2025-07-22> +# Last Modified : <2025-10-11> # # 请阅读 ./doc/01-开发与构建.md 来使用 # -------------------------------------------------------------- @@ -18,17 +19,24 @@ On-Linux = 0 On-Windows = 0 On-macOS = 0 -ifeq ($(shell uname), Linux) - On-Linux = 1 -endif - -ifeq ($(shell uname), Darwin) - On-macOS = 1 -endif - -# 只有Windows会定义$(OS)变量 -ifeq ($(OS), Windows_NT) +# Windows 会定义 OS 或 ComSpec 环境变量 +ifdef ComSpec On-Windows = 1 +else ifdef OS + ifeq ($(OS), Windows_NT) + On-Windows = 1 + endif +endif + +# 只在非 Windows 环境下调用 uname +ifneq ($(On-Windows), 1) + UNAME_S := $(shell uname 2>/dev/null || echo unknown) + ifeq ($(UNAME_S), Linux) + On-Linux = 1 + endif + ifeq ($(UNAME_S), Darwin) + On-macOS = 1 + endif endif #===================================== @@ -36,8 +44,8 @@ endif #======== Default Tooling ============ ifeq ($(On-Windows), 1) - # MSYS2 环境 - CC = cc + # Windows 环境 - 使用 gcc + CC = gcc else ifeq ($(On-macOS), 1) CC = clang else @@ -142,13 +150,25 @@ build-in-debug-mode: build-in-release-mode: CFLAGS += $(CFLAGS_optimization) build-in-release-mode: @echo Starting: Build in RELEASE mode: \'$(CC)\' $(CFLAGS) -o $(ReleaseMode-Target-Name) +ifeq ($(On-Windows), 1) + @if exist lib\chsrc.res del /Q lib\chsrc.res 2>nul + @windres lib\win_res.rc -O coff -o lib\chsrc.res -Iinclude -Ilib + @$(CC) src/chsrc-main.c lib/chsrc.res $(CFLAGS) $(_C_Warning_Flags) -o $(ReleaseMode-Target-Name) + @del /Q lib\chsrc.res 2>nul +else @$(CC) src/chsrc-main.c $(CFLAGS) $(_C_Warning_Flags) -o $(ReleaseMode-Target-Name) +endif @echo Finished: Build in RELEASE mode # CI release mode 的配置在该文件上方 build-in-ci-release-mode: @echo Starting: Build in CI-RELEASE mode: \'$(CC)\' $(CFLAGS) -o $(CIReleaseMode-Target-Name) +ifeq ($(On-Windows), 1) + @windres lib\win_res.rc -O coff -o lib\chsrc.res -Iinclude -Ilib + @$(CC) src/chsrc-main.c lib/chsrc.res $(CFLAGS) $(_C_Warning_Flags) -o $(CIReleaseMode-Target-Name) +else @$(CC) src/chsrc-main.c $(CFLAGS) $(_C_Warning_Flags) -o $(CIReleaseMode-Target-Name) +endif @echo Finished: Build in CI-RELEASE mode # 永远重新编译 @@ -163,6 +183,10 @@ test-make-env: @echo "On-macOS: $(On-macOS)" @echo "CC: $(CC)" @echo "CFLAGS: $(CFLAGS)" +ifeq ($(On-Windows), 1) + @echo "USER: $(USERNAME)" + @echo "PWD: $(CURDIR)" +else @echo "USER: $$(whoami)" @echo "PWD: $(shell pwd)" @echo "UID: $$(id -u)" @@ -173,17 +197,28 @@ test-make-env: else \ echo "HOME: $(HOME)"; \ fi +endif # 这两个测试文件都用 DEBUG mode test-xy: CFLAGS += $(CFLAGS_debug) test-xy: +ifeq ($(On-Windows), 1) + @$(CC) test/xy.c $(CFLAGS) -o xy.exe + @xy.exe +else @$(CC) test/xy.c $(CFLAGS) -o xy @./xy +endif test-fw: CFLAGS += $(CFLAGS_debug) test-fw: +ifeq ($(On-Windows), 1) + @$(CC) test/fw.c $(CFLAGS) -o fw.exe + @fw.exe +else @$(CC) test/fw.c $(CFLAGS) -o fw @./fw +endif check: test @@ -195,15 +230,25 @@ test-cli: $(DevMode-Target-Name) @perl ./test/cli.pl clean: +ifeq ($(On-Windows), 1) + -@if exist *.exe del /Q *.exe 2>nul + -@if exist xy.exe del /Q xy.exe 2>nul + -@if exist fw.exe del /Q fw.exe 2>nul + -@if exist README.md.bak* del /Q README.md.bak* 2>nul + -@if exist chsrc.exe del /Q chsrc.exe 2>nul + -@if exist chsrc-debug.exe del /Q chsrc-debug.exe 2>nul + -@if exist chsrc-release.exe del /Q chsrc-release.exe 2>nul + -@if exist chsrc-ci-release.exe del /Q chsrc-ci-release.exe 2>nul +else -@rm *.exe 2>/dev/null -@rm xy 2>/dev/null -@rm fw 2>/dev/null -@rm README.md.bak* 2>/dev/null - -@rm chsrc 2>/dev/null -@rm chsrc-debug 2>/dev/null -@rm chsrc-release 2>/dev/null -@rm chsrc-ci-release 2>/dev/null +endif # -include pkg/deb/Makefile # 不这么做,因为 pkg/deb/Makefile 需要在 pkg/deb 目录下执行 # 保持动词在前的任务名风格 diff --git a/include/chsrc_version.h b/include/chsrc_version.h new file mode 100644 index 0000000..778e4fa --- /dev/null +++ b/include/chsrc_version.h @@ -0,0 +1,24 @@ +/** ------------------------------------------------------------ + * Copyright © 2023-2025 曾奥然, 郭恒 + * SPDX-License-Identifier: MIT + * ------------------------------------------------------------- + * Lib Authors : 曾奥然 + * Contributors : Mikachu2333 + * | + * Created On : <2025-10-10> + * Last Modified : <2025-10-10> + + * !!!警告!!! + * 发布前请修改此处的内容 + * ------------------------------------------------------------*/ + +#define Chsrc_Version "0.2.3" +#define Chsrc_Release_Date "2025/10/06" + +// 以下宏仅用于 Windows +#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) + #define CHSRC_VERSION_MAJOR 0 + #define CHSRC_VERSION_MINOR 2 + #define CHSRC_VERSION_PATCH 3 + #define CHSRC_VERSION_STRING "0.2.3" +#endif diff --git a/justfile b/justfile index 2bacf86..081b4ef 100644 --- a/justfile +++ b/justfile @@ -3,11 +3,11 @@ # SPDX-License-Identifier: GPL-3.0-or-later # -------------------------------------------------------------- # Build File : justfile -# File Authors : Aoran Zeng -# Contributors : Nul None +# File Authors : Aoran Zeng +# Contributors : Mikachu2333 # | # Created On : <2025-06-18> -# Last Modified : <2025-07-21> +# Last Modified : <2025-10-11> # # 该文件主要用于在原生Windows上执行项目的基本任务,而不借助于 # GNU make 以及相应的 MSYS2、Cygwin 环境 @@ -104,9 +104,9 @@ alias c := clean default: build-in-dev-mode build-in-dev-mode: - @echo Starting: Build in DEV mode: '{{CC}}' {{CFLAGS_dev_mode_prompt}} -o {{DevMode-Target-Name}} - @{{CC}} src/chsrc-main.c {{CFLAGS_dev_mode}} -o {{DevMode-Target-Name}} - @echo Finished: Build in DEV mode + @echo Starting: Build in DEV mode: '{{CC}}' {{CFLAGS_dev_mode_prompt}} -o {{DevMode-Target-Name}} + @{{CC}} src/chsrc-main.c {{CFLAGS_dev_mode}} -o {{DevMode-Target-Name}} + @echo Finished: Build in DEV mode build-in-debug-mode: @echo Starting: Build in DEBUG mode: '{{CC}}' {{CFLAGS_debug_mode_prompt}} -o {{DebugMode-Target-Name}} @@ -115,7 +115,10 @@ build-in-debug-mode: build-in-release-mode: @echo Starting: Build in RELEASE mode: '{{CC}}' {{CFLAGS_release_mode_prompt}} -o {{ReleaseMode-Target-Name}} - @{{CC}} src/chsrc-main.c {{CFLAGS_release_mode}} -o {{ReleaseMode-Target-Name}} + {{ if os() == 'windows' { '@if exist lib\\chsrc.res del lib\\chsrc.res' } else { '' } }} + {{ if os() == 'windows' { '@windres lib\\win_res.rc -O coff -o lib\\chsrc.res -Iinclude -Ilib' } else { '' } }} + {{ if os() == 'windows' { '@{{CC}} src/chsrc-main.c lib/chsrc.res {{CFLAGS_release_mode}} -o {{ReleaseMode-Target-Name}}' } else { '@{{CC}} src/chsrc-main.c {{CFLAGS_release_mode}} -o {{ReleaseMode-Target-Name}}' } }} + {{ if os() == 'windows' { '@del lib\\chsrc.res' } else { '' } }} @echo Finished: Build in RELEASE mode debug: build-in-debug-mode diff --git a/lib/win_res.rc b/lib/win_res.rc new file mode 100644 index 0000000..d45e568 --- /dev/null +++ b/lib/win_res.rc @@ -0,0 +1,44 @@ +// chsrc.rc - Windows Resource Script +// SPDX-License-Identifier: GPL-3.0-or-later + +#include +#include "chsrc_version.h" + +// 图标资源 +IDI_ICON1 ICON DISCARDABLE "logo.ico" + +// 版本信息 +VS_VERSION_INFO VERSIONINFO + FILEVERSION CHSRC_VERSION_MAJOR,CHSRC_VERSION_MINOR,CHSRC_VERSION_PATCH,0 + PRODUCTVERSION CHSRC_VERSION_MAJOR,CHSRC_VERSION_MINOR,CHSRC_VERSION_PATCH,0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS_NT_WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "Github RubyMetric" + VALUE "FileDescription", "Change Source everywhere for every software" + VALUE "FileVersion", Chsrc_Version + VALUE "InternalName", "chsrc" + VALUE "LegalCopyright", "Copyright (c) 2023-2025 RubyMetric" + VALUE "OriginalFilename", "chsrc.exe" + VALUE "ProductName", "chsrc" + VALUE "ProductVersion", Chsrc_Release_Date + VALUE "Comments", "MIT License" + VALUE "LegalTrademarks", "" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0804, 1200, 0x0409, 1200 // 简体中文和英语 + END +END diff --git a/src/chsrc-main.c b/src/chsrc-main.c index 98318a7..94f4031 100644 --- a/src/chsrc-main.c +++ b/src/chsrc-main.c @@ -30,8 +30,8 @@ * 然的加入,逐渐成长为互相支持的伙伴。 * ------------------------------------------------------------*/ -#define Chsrc_Version "0.2.3" -#define Chsrc_Release_Date "2025/10/06" +#include "chsrc_version.h" + #define Chsrc_Maintain_URL "https://github.com/RubyMetric/chsrc" #define Chsrc_Maintain_URL2 "https://gitee.com/RubyMetric/chsrc"