Skip to content

Commit b84f2f9

Browse files
committed
feat(build): 支持编译资源文件
修复just 修复makefile
1 parent de75aaa commit b84f2f9

File tree

5 files changed

+142
-26
lines changed

5 files changed

+142
-26
lines changed

Makefile

Lines changed: 62 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
# SPDX-License-Identifier: GPL-3.0-or-later
44
# --------------------------------------------------------------
55
# Build File : Makefile
6-
# File Authors : Aoran Zeng <[email protected]>
7-
# Contributors : Yangmoooo <[email protected]>
8-
# | sanchuanhehe <[email protected]>
9-
# |
6+
# File Authors : Aoran Zeng <[email protected]>
7+
# Contributors : Yangmoooo <[email protected]>
8+
# | sanchuanhehe <[email protected]>
9+
# | Mikachu2333 <[email protected]>
10+
# |
1011
# Created On : <2023-08-28>
11-
# Last Modified : <2025-07-22>
12+
# Last Modified : <2025-10-11>
1213
#
1314
# 请阅读 ./doc/01-开发与构建.md 来使用
1415
# --------------------------------------------------------------
@@ -18,26 +19,33 @@ On-Linux = 0
1819
On-Windows = 0
1920
On-macOS = 0
2021

21-
ifeq ($(shell uname), Linux)
22-
On-Linux = 1
23-
endif
24-
25-
ifeq ($(shell uname), Darwin)
26-
On-macOS = 1
22+
# Windows 会定义 OS 或 ComSpec 环境变量
23+
ifdef ComSpec
24+
On-Windows = 1
25+
else ifdef OS
26+
ifeq ($(OS), Windows_NT)
27+
On-Windows = 1
28+
endif
2729
endif
2830

29-
# 只有Windows会定义$(OS)变量
30-
ifeq ($(OS), Windows_NT)
31-
On-Windows = 1
31+
# 只在非 Windows 环境下调用 uname
32+
ifneq ($(On-Windows), 1)
33+
UNAME_S := $(shell uname 2>/dev/null || echo unknown)
34+
ifeq ($(UNAME_S), Linux)
35+
On-Linux = 1
36+
endif
37+
ifeq ($(UNAME_S), Darwin)
38+
On-macOS = 1
39+
endif
3240
endif
3341
#=====================================
3442

3543

3644

3745
#======== Default Tooling ============
3846
ifeq ($(On-Windows), 1)
39-
# MSYS2 环境
40-
CC = cc
47+
# Windows 环境 - 使用 gcc
48+
CC = gcc
4149
else ifeq ($(On-macOS), 1)
4250
CC = clang
4351
else
@@ -142,13 +150,25 @@ build-in-debug-mode:
142150
build-in-release-mode: CFLAGS += $(CFLAGS_optimization)
143151
build-in-release-mode:
144152
@echo Starting: Build in RELEASE mode: \'$(CC)\' $(CFLAGS) -o $(ReleaseMode-Target-Name)
153+
ifeq ($(On-Windows), 1)
154+
@if exist lib\chsrc.res del /Q lib\chsrc.res 2>nul
155+
@windres lib\win_res.rc -O coff -o lib\chsrc.res -Iinclude -Ilib
156+
@$(CC) src/chsrc-main.c lib/chsrc.res $(CFLAGS) $(_C_Warning_Flags) -o $(ReleaseMode-Target-Name)
157+
@del /Q lib\chsrc.res 2>nul
158+
else
145159
@$(CC) src/chsrc-main.c $(CFLAGS) $(_C_Warning_Flags) -o $(ReleaseMode-Target-Name)
160+
endif
146161
@echo Finished: Build in RELEASE mode
147162

148163
# CI release mode 的配置在该文件上方
149164
build-in-ci-release-mode:
150165
@echo Starting: Build in CI-RELEASE mode: \'$(CC)\' $(CFLAGS) -o $(CIReleaseMode-Target-Name)
166+
ifeq ($(On-Windows), 1)
167+
@windres lib\win_res.rc -O coff -o lib\chsrc.res -Iinclude -Ilib
168+
@$(CC) src/chsrc-main.c lib/chsrc.res $(CFLAGS) $(_C_Warning_Flags) -o $(CIReleaseMode-Target-Name)
169+
else
151170
@$(CC) src/chsrc-main.c $(CFLAGS) $(_C_Warning_Flags) -o $(CIReleaseMode-Target-Name)
171+
endif
152172
@echo Finished: Build in CI-RELEASE mode
153173

154174
# 永远重新编译
@@ -163,6 +183,10 @@ test-make-env:
163183
@echo "On-macOS: $(On-macOS)"
164184
@echo "CC: $(CC)"
165185
@echo "CFLAGS: $(CFLAGS)"
186+
ifeq ($(On-Windows), 1)
187+
@echo "USER: $(USERNAME)"
188+
@echo "PWD: $(CURDIR)"
189+
else
166190
@echo "USER: $$(whoami)"
167191
@echo "PWD: $(shell pwd)"
168192
@echo "UID: $$(id -u)"
@@ -173,17 +197,28 @@ test-make-env:
173197
else \
174198
echo "HOME: $(HOME)"; \
175199
fi
200+
endif
176201

177202
# 这两个测试文件都用 DEBUG mode
178203
test-xy: CFLAGS += $(CFLAGS_debug)
179204
test-xy:
205+
ifeq ($(On-Windows), 1)
206+
@$(CC) test/xy.c $(CFLAGS) -o xy.exe
207+
@xy.exe
208+
else
180209
@$(CC) test/xy.c $(CFLAGS) -o xy
181210
@./xy
211+
endif
182212

183213
test-fw: CFLAGS += $(CFLAGS_debug)
184214
test-fw:
215+
ifeq ($(On-Windows), 1)
216+
@$(CC) test/fw.c $(CFLAGS) -o fw.exe
217+
@fw.exe
218+
else
185219
@$(CC) test/fw.c $(CFLAGS) -o fw
186220
@./fw
221+
endif
187222

188223
check: test
189224

@@ -195,15 +230,25 @@ test-cli: $(DevMode-Target-Name)
195230
@perl ./test/cli.pl
196231

197232
clean:
233+
ifeq ($(On-Windows), 1)
234+
-@if exist *.exe del /Q *.exe 2>nul
235+
-@if exist xy.exe del /Q xy.exe 2>nul
236+
-@if exist fw.exe del /Q fw.exe 2>nul
237+
-@if exist README.md.bak* del /Q README.md.bak* 2>nul
238+
-@if exist chsrc.exe del /Q chsrc.exe 2>nul
239+
-@if exist chsrc-debug.exe del /Q chsrc-debug.exe 2>nul
240+
-@if exist chsrc-release.exe del /Q chsrc-release.exe 2>nul
241+
-@if exist chsrc-ci-release.exe del /Q chsrc-ci-release.exe 2>nul
242+
else
198243
-@rm *.exe 2>/dev/null
199244
-@rm xy 2>/dev/null
200245
-@rm fw 2>/dev/null
201246
-@rm README.md.bak* 2>/dev/null
202-
203247
-@rm chsrc 2>/dev/null
204248
-@rm chsrc-debug 2>/dev/null
205249
-@rm chsrc-release 2>/dev/null
206250
-@rm chsrc-ci-release 2>/dev/null
251+
endif
207252

208253
# -include pkg/deb/Makefile # 不这么做,因为 pkg/deb/Makefile 需要在 pkg/deb 目录下执行
209254
# 保持动词在前的任务名风格

include/chsrc_version.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/** ------------------------------------------------------------
2+
* Copyright © 2023-2025 曾奥然, 郭恒
3+
* SPDX-License-Identifier: MIT
4+
* -------------------------------------------------------------
5+
* Lib Authors : 曾奥然 <[email protected]>
6+
* Contributors : Mikachu2333 <[email protected]>
7+
* |
8+
* Created On : <2025-10-10>
9+
* Last Modified : <2025-10-10>
10+
11+
* !!!警告!!!
12+
* 发布前请修改此处的内容
13+
* ------------------------------------------------------------*/
14+
15+
#define Chsrc_Version "0.2.3"
16+
#define Chsrc_Release_Date "2025/10/06"
17+
18+
// 以下宏仅用于 Windows
19+
#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)
20+
#define CHSRC_VERSION_MAJOR 0
21+
#define CHSRC_VERSION_MINOR 2
22+
#define CHSRC_VERSION_PATCH 3
23+
#define CHSRC_VERSION_STRING "0.2.3"
24+
#endif

justfile

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
# SPDX-License-Identifier: GPL-3.0-or-later
44
# --------------------------------------------------------------
55
# Build File : justfile
6-
# File Authors : Aoran Zeng <[email protected]>
7-
# Contributors : Nul None <[email protected]>
6+
# File Authors : Aoran Zeng <[email protected]>
7+
# Contributors : Mikachu2333 <[email protected]>
88
# |
99
# Created On : <2025-06-18>
10-
# Last Modified : <2025-07-21>
10+
# Last Modified : <2025-10-11>
1111
#
1212
# 该文件主要用于在原生Windows上执行项目的基本任务,而不借助于
1313
# GNU make 以及相应的 MSYS2、Cygwin 环境
@@ -104,9 +104,9 @@ alias c := clean
104104
default: build-in-dev-mode
105105

106106
build-in-dev-mode:
107-
@echo Starting: Build in DEV mode: '{{CC}}' {{CFLAGS_dev_mode_prompt}} -o {{DevMode-Target-Name}}
108-
@{{CC}} src/chsrc-main.c {{CFLAGS_dev_mode}} -o {{DevMode-Target-Name}}
109-
@echo Finished: Build in DEV mode
107+
@echo Starting: Build in DEV mode: '{{CC}}' {{CFLAGS_dev_mode_prompt}} -o {{DevMode-Target-Name}}
108+
@{{CC}} src/chsrc-main.c {{CFLAGS_dev_mode}} -o {{DevMode-Target-Name}}
109+
@echo Finished: Build in DEV mode
110110

111111
build-in-debug-mode:
112112
@echo Starting: Build in DEBUG mode: '{{CC}}' {{CFLAGS_debug_mode_prompt}} -o {{DebugMode-Target-Name}}
@@ -115,7 +115,10 @@ build-in-debug-mode:
115115

116116
build-in-release-mode:
117117
@echo Starting: Build in RELEASE mode: '{{CC}}' {{CFLAGS_release_mode_prompt}} -o {{ReleaseMode-Target-Name}}
118-
@{{CC}} src/chsrc-main.c {{CFLAGS_release_mode}} -o {{ReleaseMode-Target-Name}}
118+
{{ if os() == 'windows' { '@if exist lib\\chsrc.res del lib\\chsrc.res' } else { '' } }}
119+
{{ if os() == 'windows' { '@windres lib\\win_res.rc -O coff -o lib\\chsrc.res -Iinclude -Ilib' } else { '' } }}
120+
{{ 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}}' } }}
121+
{{ if os() == 'windows' { '@del lib\\chsrc.res' } else { '' } }}
119122
@echo Finished: Build in RELEASE mode
120123
121124
debug: build-in-debug-mode

lib/win_res.rc

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// chsrc.rc - Windows Resource Script
2+
// SPDX-License-Identifier: GPL-3.0-or-later
3+
4+
#include <windows.h>
5+
#include "chsrc_version.h"
6+
7+
// 图标资源
8+
IDI_ICON1 ICON DISCARDABLE "logo.ico"
9+
10+
// 版本信息
11+
VS_VERSION_INFO VERSIONINFO
12+
FILEVERSION CHSRC_VERSION_MAJOR,CHSRC_VERSION_MINOR,CHSRC_VERSION_PATCH,0
13+
PRODUCTVERSION CHSRC_VERSION_MAJOR,CHSRC_VERSION_MINOR,CHSRC_VERSION_PATCH,0
14+
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
15+
#ifdef _DEBUG
16+
FILEFLAGS VS_FF_DEBUG
17+
#else
18+
FILEFLAGS 0x0L
19+
#endif
20+
FILEOS VOS_NT_WINDOWS32
21+
FILETYPE VFT_APP
22+
FILESUBTYPE VFT2_UNKNOWN
23+
BEGIN
24+
BLOCK "StringFileInfo"
25+
BEGIN
26+
BLOCK "040904b0"
27+
BEGIN
28+
VALUE "CompanyName", "Github RubyMetric"
29+
VALUE "FileDescription", "Change Source everywhere for every software"
30+
VALUE "FileVersion", Chsrc_Version
31+
VALUE "InternalName", "chsrc"
32+
VALUE "LegalCopyright", "Copyright (c) 2023-2025 RubyMetric"
33+
VALUE "OriginalFilename", "chsrc.exe"
34+
VALUE "ProductName", "chsrc"
35+
VALUE "ProductVersion", Chsrc_Release_Date
36+
VALUE "Comments", "MIT License"
37+
VALUE "LegalTrademarks", ""
38+
END
39+
END
40+
BLOCK "VarFileInfo"
41+
BEGIN
42+
VALUE "Translation", 0x0804, 1200, 0x0409, 1200 // 简体中文和英语
43+
END
44+
END

src/chsrc-main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
* 然的加入,逐渐成长为互相支持的伙伴。
3131
* ------------------------------------------------------------*/
3232

33-
#define Chsrc_Version "0.2.3"
34-
#define Chsrc_Release_Date "2025/10/06"
33+
#include "chsrc_version.h"
34+
3535
#define Chsrc_Maintain_URL "https://github.com/RubyMetric/chsrc"
3636
#define Chsrc_Maintain_URL2 "https://gitee.com/RubyMetric/chsrc"
3737

0 commit comments

Comments
 (0)