diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..6d0ac3d --- /dev/null +++ b/CMakeLists.txt @@ -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} + $ + COMMENT "Copying IUP DLLs to build directory..." + ) +endif() diff --git a/Makefile b/Makefile deleted file mode 100644 index 44f9c1e..0000000 --- a/Makefile +++ /dev/null @@ -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 diff --git a/README.md b/README.md index 4e1e93b..2f5cdef 100644 --- a/README.md +++ b/README.md @@ -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`。 ### 打包 (可选) diff --git a/bin/PathEditor.exe b/bin/PathEditor.exe deleted file mode 100644 index cc98533..0000000 Binary files a/bin/PathEditor.exe and /dev/null differ diff --git a/bin/freetype6.dll b/bin/freetype6.dll deleted file mode 100644 index e8c3c21..0000000 Binary files a/bin/freetype6.dll and /dev/null differ diff --git a/bin/ftgl.dll b/bin/ftgl.dll deleted file mode 100644 index 97fc44d..0000000 Binary files a/bin/ftgl.dll and /dev/null differ diff --git a/bin/iup.dll b/bin/iup.dll deleted file mode 100644 index aceb679..0000000 Binary files a/bin/iup.dll and /dev/null differ diff --git a/bin/iup_mglplot.dll b/bin/iup_mglplot.dll deleted file mode 100644 index 81afca5..0000000 Binary files a/bin/iup_mglplot.dll and /dev/null differ diff --git a/bin/iup_plot.dll b/bin/iup_plot.dll deleted file mode 100644 index 3bc153e..0000000 Binary files a/bin/iup_plot.dll and /dev/null differ diff --git a/bin/iup_scintilla.dll b/bin/iup_scintilla.dll deleted file mode 100644 index 96a09b8..0000000 Binary files a/bin/iup_scintilla.dll and /dev/null differ diff --git a/bin/iupcd.dll b/bin/iupcd.dll deleted file mode 100644 index a0c78a0..0000000 Binary files a/bin/iupcd.dll and /dev/null differ diff --git a/bin/iupcontrols.dll b/bin/iupcontrols.dll deleted file mode 100644 index 89a2aef..0000000 Binary files a/bin/iupcontrols.dll and /dev/null differ diff --git a/bin/iupgl.dll b/bin/iupgl.dll deleted file mode 100644 index daeb402..0000000 Binary files a/bin/iupgl.dll and /dev/null differ diff --git a/bin/iupglcontrols.dll b/bin/iupglcontrols.dll deleted file mode 100644 index 43b6a94..0000000 Binary files a/bin/iupglcontrols.dll and /dev/null differ diff --git a/bin/iupim.dll b/bin/iupim.dll deleted file mode 100644 index 34909fe..0000000 Binary files a/bin/iupim.dll and /dev/null differ diff --git a/bin/iupimglib.dll b/bin/iupimglib.dll deleted file mode 100644 index 221ff24..0000000 Binary files a/bin/iupimglib.dll and /dev/null differ diff --git a/bin/iupole.dll b/bin/iupole.dll deleted file mode 100644 index 47719a5..0000000 Binary files a/bin/iupole.dll and /dev/null differ diff --git a/bin/iuptuio.dll b/bin/iuptuio.dll deleted file mode 100644 index 1b56326..0000000 Binary files a/bin/iuptuio.dll and /dev/null differ diff --git a/bin/records/backup_20260317_201852.reg b/bin/records/backup_20260317_201852.reg deleted file mode 100644 index d33147a..0000000 Binary files a/bin/records/backup_20260317_201852.reg and /dev/null differ diff --git a/bin/zlib1.dll b/bin/zlib1.dll deleted file mode 100644 index 4f435eb..0000000 Binary files a/bin/zlib1.dll and /dev/null differ diff --git a/dist/installer.iss b/dist/installer.iss index 512f122..e2b4605 100644 --- a/dist/installer.iss +++ b/dist/installer.iss @@ -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] diff --git a/src/main.c b/src/main.c index ebd2be2..bbb2535 100644 --- a/src/main.c +++ b/src/main.c @@ -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 */