mirror of
https://github.com/LHY0125/PathEditor.git
synced 2026-05-09 18:02:52 +08:00
build: 迁移构建系统至 CMake 并清理旧的二进制文件
- 删除过时的 Makefile 和 bin/ 目录下的二进制文件 - 新增 CMakeLists.txt 以支持更标准的跨平台构建 - 更新 README.md 中的编译步骤和依赖说明 - 调整 main.c 中的注释和 installer.iss 中的源文件路径 - 构建输出现在位于 build/ 目录,DLL 文件在构建后自动复制
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(PathEditor VERSION 3.0 LANGUAGES C)
|
||||
|
||||
# 启用资源编译器以处理 .rc 文件
|
||||
enable_language(RC)
|
||||
|
||||
# 设置 C 标准
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
|
||||
# 定义源文件
|
||||
set(SOURCES
|
||||
src/main.c
|
||||
src/utils.c
|
||||
src/registry.c
|
||||
src/ui.c
|
||||
src/globals.c
|
||||
src/ui_utils.c
|
||||
src/cb_edit.c
|
||||
src/cb_file.c
|
||||
src/cb_main.c
|
||||
ico/resources.rc
|
||||
)
|
||||
|
||||
# 创建 GUI 可执行文件(WIN32 属性会自动添加 -mwindows 参数)
|
||||
add_executable(${PROJECT_NAME} WIN32 ${SOURCES})
|
||||
|
||||
# 添加宏定义
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||
_WIN32
|
||||
UNICODE
|
||||
_UNICODE
|
||||
)
|
||||
|
||||
# 添加编译选项
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
-Wall
|
||||
-O2
|
||||
-fexec-charset=UTF-8
|
||||
)
|
||||
endif()
|
||||
|
||||
# 设置头文件搜索路径
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/include
|
||||
${CMAKE_SOURCE_DIR}/libs/iup-3.31_Win64_dllw6_lib/include
|
||||
)
|
||||
|
||||
# 设置库文件搜索路径
|
||||
target_link_directories(${PROJECT_NAME} PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/libs/iup-3.31_Win64_dllw6_lib
|
||||
)
|
||||
|
||||
# 链接所需库
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||
iup
|
||||
iupcd
|
||||
gdi32
|
||||
comdlg32
|
||||
comctl32
|
||||
uuid
|
||||
ole32
|
||||
advapi32
|
||||
)
|
||||
|
||||
# 添加 POST_BUILD 自定义命令,复制 DLL 到构建输出目录
|
||||
file(GLOB IUP_DLLS "${CMAKE_SOURCE_DIR}/libs/iup-3.31_Win64_dllw6_lib/*.dll")
|
||||
if(IUP_DLLS)
|
||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${IUP_DLLS}
|
||||
$<TARGET_FILE_DIR:${PROJECT_NAME}>
|
||||
COMMENT "Copying IUP DLLs to build directory..."
|
||||
)
|
||||
endif()
|
||||
@@ -1,69 +0,0 @@
|
||||
CC = gcc
|
||||
WINDRES = windres
|
||||
|
||||
# Paths - specific to user environment
|
||||
IUP_DIR = libs/iup-3.31_Win64_dllw6_lib
|
||||
INCLUDE_DIR = $(IUP_DIR)/include
|
||||
LIB_DIR = $(IUP_DIR)
|
||||
LOCAL_INCLUDE_DIR = include
|
||||
|
||||
# Output Directories
|
||||
OBJ_DIR = obj
|
||||
BIN_DIR = bin
|
||||
|
||||
# Flags
|
||||
# -mwindows: Create GUI app (no console)
|
||||
# -DUNICODE -D_UNICODE: Use Wide Character API
|
||||
CFLAGS = -Wall -O2 -I$(INCLUDE_DIR) -I$(LOCAL_INCLUDE_DIR) -D_WIN32 -DUNICODE -D_UNICODE -fexec-charset=UTF-8
|
||||
LDFLAGS = -L$(LIB_DIR) -liup -liupcd -lgdi32 -lcomdlg32 -lcomctl32 -luuid -lole32 -ladvapi32 -mwindows
|
||||
|
||||
# Source
|
||||
SRC = src/main.c src/utils.c src/registry.c src/ui.c src/ui_utils.c src/cb_edit.c src/cb_file.c src/cb_main.c src/globals.c
|
||||
RES = ico/resources.rc
|
||||
OBJ = $(OBJ_DIR)/main.o $(OBJ_DIR)/utils.o $(OBJ_DIR)/registry.o $(OBJ_DIR)/ui.o $(OBJ_DIR)/ui_utils.o $(OBJ_DIR)/cb_edit.o $(OBJ_DIR)/cb_file.o $(OBJ_DIR)/cb_main.o $(OBJ_DIR)/globals.o $(OBJ_DIR)/resources.o
|
||||
EXE = $(BIN_DIR)/PathEditor.exe
|
||||
|
||||
all: $(BIN_DIR) $(OBJ_DIR) $(EXE)
|
||||
|
||||
$(BIN_DIR):
|
||||
if not exist $(BIN_DIR) mkdir $(BIN_DIR)
|
||||
|
||||
$(OBJ_DIR):
|
||||
if not exist $(OBJ_DIR) mkdir $(OBJ_DIR)
|
||||
|
||||
$(EXE): $(OBJ)
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
$(OBJ_DIR)/main.o: src/main.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
$(OBJ_DIR)/utils.o: src/utils.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
$(OBJ_DIR)/registry.o: src/registry.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
$(OBJ_DIR)/ui.o: src/ui.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
$(OBJ_DIR)/ui_utils.o: src/ui_utils.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
$(OBJ_DIR)/cb_edit.o: src/cb_edit.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
$(OBJ_DIR)/cb_file.o: src/cb_file.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
$(OBJ_DIR)/cb_main.o: src/cb_main.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
$(OBJ_DIR)/globals.o: src/globals.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
$(OBJ_DIR)/resources.o: ico/resources.rc
|
||||
$(WINDRES) -i $< -o $@
|
||||
|
||||
clean:
|
||||
if exist $(OBJ_DIR)\*.o del /Q $(OBJ_DIR)\*.o
|
||||
if exist $(BIN_DIR)\*.exe del /Q $(BIN_DIR)\*.exe
|
||||
@@ -61,12 +61,14 @@
|
||||
|
||||
* Windows 操作系统
|
||||
* GCC 编译器 (推荐 MinGW-w64)
|
||||
* Make 工具
|
||||
* CMake 工具
|
||||
* IUP 库 (已包含在 `libs` 目录下)
|
||||
* Inno Setup 6 (仅打包需要)
|
||||
|
||||
### 编译步骤
|
||||
|
||||
本项目使用 CMake 构建系统,支持生成更标准的构建文件并集成到各大 IDE。
|
||||
|
||||
1. 克隆仓库:
|
||||
|
||||
```bash
|
||||
@@ -74,14 +76,18 @@
|
||||
cd PathEditor
|
||||
```
|
||||
|
||||
2. 编译项目:
|
||||
2. 使用 CMake 配置和编译:
|
||||
|
||||
```bash
|
||||
mingw32-make
|
||||
# 生成构建系统 (以 MinGW 为例)
|
||||
cmake -B build -G "MinGW Makefiles"
|
||||
|
||||
# 编译项目
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
3. 运行:
|
||||
编译成功后,可执行文件位于 `bin/PathEditor.exe`。
|
||||
编译成功后,可执行文件位于 `build/PathEditor.exe`。
|
||||
|
||||
### 打包 (可选)
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Vendored
+2
-2
@@ -37,8 +37,8 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||
|
||||
[Files]
|
||||
Source: "d:\Code\doing_exercises\programs\PathEditor\bin\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "d:\Code\doing_exercises\programs\PathEditor\bin\*.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "d:\Code\doing_exercises\programs\PathEditor\build\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "d:\Code\doing_exercises\programs\PathEditor\build\*.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
|
||||
[Icons]
|
||||
|
||||
+5
-3
@@ -8,9 +8,11 @@
|
||||
#include "cb_main.h"
|
||||
|
||||
/*
|
||||
编译命令:
|
||||
Remove-Item -Path "obj\*.o" -Force -ErrorAction SilentlyContinue && mingw32-make
|
||||
打包命令:
|
||||
!编译命令:
|
||||
cmake -B build -G "MinGW Makefiles"
|
||||
cmake --build build
|
||||
|
||||
!打包命令:
|
||||
build_installer.bat
|
||||
*/
|
||||
|
||||
|
||||
Reference in New Issue
Block a user