基于 Win32 API + GDI+ 从零实现仿真数据检查器,用于替代 Simulink.sdi.view 查看带时间轴的 CSV 数据。 - 新增 Utilities 层:UTF-8/宽字符与数值格式化工具、CSV 解析器(自动识别分隔符与引号)、 信号数据集模型(时间轴识别、信号名解析、取值采样)、Solarised Light 主题色板与绘图基础工具 - 新增 Toolbar 组件:打开 CSV、适应窗口、适应时间、放大、缩小、合并网格、每信号一格 - 新增 SignalPanel 组件:信号列表(可见性开关、颜色标识、所属网格标记)、样式编辑区 (颜色、线宽、线段/散点/点线/阶梯显示方式、所属网格),支持右键上下文菜单与滚轮滚动 - 新增 PlotView 组件:多网格波形绘制、自适应时间轴与幅值轴、网格线、信号图例、 时间光标与实时数值读数、纵向滚动条 - 新增 Application 组件:DPI 感知(Per-Monitor V2)、双缓冲绘制、区域布局与分隔条拖拽、 鼠标与键盘消息分发、文件拖放、状态栏提示 - 交互能力:滚轮缩放、Shift+滚轮平移、Ctrl+滚轮缩放幅值、拖拽平移、幅值轴纵向缩放、 右键框选缩放、单击固定/取消时间光标、双击自适应、方向键平移与滚动 - 补齐 Makefile 的源文件与头文件索引,并新增 gdiplus、comdlg32 链接库
239 lines
7.3 KiB
Makefile
239 lines
7.3 KiB
Makefile
# 目标文件名称
|
|
TARGET_FILE_NAME = Target
|
|
|
|
# 编译目录
|
|
BUILD_DIR = Build
|
|
|
|
# Release 编译子目录
|
|
SUB_DIR_RELEASE = Release
|
|
|
|
# Debug 编译子目录
|
|
SUB_DIR_DEBUG = Debug
|
|
|
|
# Release 优化等级
|
|
RELEASE_OPT = -Os
|
|
|
|
# Debug 优化等级
|
|
DEBUG_OPT = -O0
|
|
|
|
# GUI或CUI编译选项 [0]CUI/Console [1]GUI
|
|
GUI = 1
|
|
|
|
# C编译标准
|
|
C_STD = c17
|
|
|
|
# C++编译标准
|
|
CXX_STD = c++17
|
|
|
|
# 源文件编码定义
|
|
INPUT_CHAR_ENCODING = UTF-8
|
|
|
|
# 编译产物单字节字符(char)编码定义
|
|
OUTPUT_CHAR_ENCODING = GBK
|
|
|
|
# 编译产物宽字符(wchar_t)编码定义
|
|
OUTPUT_WCHAR_ENCODING = UTF-16LE
|
|
|
|
# 编译工具前缀
|
|
COMPLIER_PREFIX = \
|
|
|
|
# C编译工具
|
|
C_COMPLIER = $(strip $(COMPLIER_PREFIX))gcc
|
|
|
|
# C++编译工具
|
|
CXX_COMPLIER = $(strip $(COMPLIER_PREFIX))g++
|
|
|
|
# Windows 资源文件编译工具
|
|
WIN_RES_COMPLIER = windres
|
|
|
|
##################################################################################
|
|
|
|
# 链接库
|
|
LIB_LINK = \
|
|
-lgdi32 \
|
|
-lgdiplus \
|
|
-lcomdlg32 \
|
|
-ld3d11 \
|
|
-ldwmapi \
|
|
-ld3dcompiler \
|
|
|
|
# C定义
|
|
C_DEFS = \
|
|
_UNICODE \
|
|
UNICODE \
|
|
|
|
# C头文件目录
|
|
C_INCLUDES_PATHS = \
|
|
|
|
# C源文件目录
|
|
C_SOURCES_PATHS = \
|
|
|
|
# C额外单个源文件
|
|
C_EXTERA_SOURCES = \
|
|
|
|
# C++定义
|
|
CXX_DEFS = \
|
|
_UNICODE \
|
|
UNICODE \
|
|
|
|
# C++ 头文件目录
|
|
CXX_INCLUDES_PATHS = \
|
|
Utilities/Inc \
|
|
Components/Main/Inc \
|
|
Components/Application/Inc \
|
|
Components/Toolbar/Inc \
|
|
Components/SignalPanel/Inc \
|
|
Components/PlotView/Inc \
|
|
|
|
# C++源文件目录
|
|
CXX_SOURCES_PATHS = \
|
|
Utilities/Src \
|
|
Components/Main/Src \
|
|
Components/Application/Src \
|
|
Components/Toolbar/Src \
|
|
Components/SignalPanel/Src \
|
|
Components/PlotView/Src \
|
|
|
|
# C++额外单个源文件
|
|
CXX_EXTERA_SOURCES = \
|
|
|
|
# Windows 资源文件脚本头文件路径
|
|
WIN_RESOURCE_INCLUDES_PATHS = \
|
|
|
|
# Windows 资源文件脚本列表
|
|
WIN_RESOURCE_SCRIPTS = \
|
|
|
|
##################################################################################
|
|
|
|
# C编译选项
|
|
CFLAGS = $(foreach text,$(C_DEFS),$(addprefix -D,$(text))) \
|
|
$(foreach path,$(C_INCLUDES_PATHS),$(addprefix -I,$(path))) \
|
|
-std=$(strip $(C_STD)) \
|
|
-finput-charset=$(strip $(INPUT_CHAR_ENCODING)) \
|
|
-fexec-charset=$(strip $(OUTPUT_CHAR_ENCODING)) \
|
|
-fwide-exec-charset=$(strip $(OUTPUT_WCHAR_ENCODING)) \
|
|
-static \
|
|
-Wall \
|
|
-MMD -MP -MF"$(@:%.o=%.d)" \
|
|
|
|
# C++编译选项
|
|
CXXFLAGS = $(foreach text,$(CXX_DEFS),$(addprefix -D,$(text))) \
|
|
$(foreach path,$(CXX_INCLUDES_PATHS),$(addprefix -I,$(path))) \
|
|
-std=$(strip $(CXX_STD)) \
|
|
-finput-charset=$(strip $(INPUT_CHAR_ENCODING)) \
|
|
-fexec-charset=$(strip $(OUTPUT_CHAR_ENCODING)) \
|
|
-fwide-exec-charset=$(strip $(OUTPUT_WCHAR_ENCODING)) \
|
|
-static \
|
|
-Wall \
|
|
-MMD -MP -MF"$(@:%.o=%.d)" \
|
|
-lstdc++ \
|
|
|
|
# 链接选项
|
|
LDFLAGS = -Wl,-Map,$(basename $@).map \
|
|
|
|
##################################################################################
|
|
|
|
# GUI与CUI选项附加
|
|
ifeq ($(GUI), 1)
|
|
LDFLAGS += -mwindows
|
|
else
|
|
LDFLAGS += -mconsole
|
|
endif
|
|
|
|
# C目标文件及索引目录关联
|
|
OBJECTS = $(notdir $(C_EXTERA_SOURCES:.c=.o))
|
|
OBJECTS += $(subst .c,.o,$(notdir $(foreach path,$(C_SOURCES_PATHS),$(wildcard $(path)/*.c))))
|
|
vpath %.c $(sort $(dir $(C_EXTERA_SOURCES))) $(sort $(C_SOURCES_PATHS))
|
|
|
|
# C++目标文件及索引目录关联
|
|
OBJECTS += $(notdir $(CXX_EXTERA_SOURCES:.cpp=.o))
|
|
OBJECTS += $(subst .cpp,.o,$(notdir $(foreach path,$(CXX_SOURCES_PATHS),$(wildcard $(path)/*.cpp))))
|
|
vpath %.cpp $(sort $(dir $(CXX_EXTERA_SOURCES))) $(sort $(CXX_SOURCES_PATHS))
|
|
|
|
# Windows资源文件及索引目录关联
|
|
OBJECTS += $(notdir $(WIN_RESOURCE_SCRIPTS:.rc=.o))
|
|
vpath %.rc $(sort $(dir $(WIN_RESOURCE_SCRIPTS)))
|
|
|
|
|
|
# Release 目标文件
|
|
RELEASE_OBJECTS = $(addprefix $(BUILD_DIR)/$(SUB_DIR_RELEASE)/,$(OBJECTS))
|
|
|
|
# Debug 目标文件
|
|
DEBUG_OBJECTS = $(addprefix $(BUILD_DIR)/$(SUB_DIR_DEBUG)/,$(OBJECTS))
|
|
|
|
##################################################################################
|
|
|
|
# all任务 目标为 release 和 debug 产物
|
|
all: $(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(TARGET_FILE_NAME).exe $(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(TARGET_FILE_NAME).exe
|
|
@echo ====== [All] Build Procedure Accomplished ======
|
|
|
|
# release任务 目标为 release 产物
|
|
release: $(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(TARGET_FILE_NAME).exe
|
|
@echo ====== [Release] Build Procedure Accomplished ======
|
|
|
|
# debug任务 目标为 debug 产物
|
|
debug: $(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(TARGET_FILE_NAME).exe
|
|
@echo ====== [Debug] Build Procedure Accomplished ======
|
|
|
|
# 清理任务
|
|
clean: $(BUILD_DIR)
|
|
powershell rm -r $(BUILD_DIR)
|
|
|
|
# 构建目录生成
|
|
$(BUILD_DIR):
|
|
powershell mkdir $@
|
|
|
|
# Release 工作目录生成
|
|
$(BUILD_DIR)/$(SUB_DIR_RELEASE): | $(BUILD_DIR)
|
|
powershell mkdir $@
|
|
|
|
# Debug 工作目录生成
|
|
$(BUILD_DIR)/$(SUB_DIR_DEBUG): | $(BUILD_DIR)
|
|
powershell mkdir $@
|
|
|
|
# Release 最终可执行文件编译任务
|
|
$(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(TARGET_FILE_NAME).exe: $(RELEASE_OBJECTS)
|
|
@echo ====== [Release] All File Compiled. Now Linking... ======
|
|
$(CXX_COMPLIER) $(RELEASE_OBJECTS) -static -s -o $@ $(LIB_LINK) $(LDFLAGS)
|
|
@echo ====== [Release] Program Link Finished ======
|
|
|
|
# Debug 最终可执行文件编译任务
|
|
$(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(TARGET_FILE_NAME).exe: $(DEBUG_OBJECTS)
|
|
@echo ====== [Debug] All File Compiled. Now Linking... ======
|
|
$(CXX_COMPLIER) $(DEBUG_OBJECTS) -static -o $@ $(LIB_LINK) $(LDFLAGS)
|
|
@echo ====== [Debug] Program Link Finished ======
|
|
|
|
# C Release 目标文件编译
|
|
$(BUILD_DIR)/$(SUB_DIR_RELEASE)/%.o: %.c Makefile | $(BUILD_DIR)/$(SUB_DIR_RELEASE)
|
|
@echo ====== [Release] C Source File "$<" Compiling... ======
|
|
$(C_COMPLIER) -c $(CFLAGS) $(RELEASE_OPT) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
# C++ Release 目标文件编译
|
|
$(BUILD_DIR)/$(SUB_DIR_RELEASE)/%.o: %.cpp Makefile | $(BUILD_DIR)/$(SUB_DIR_RELEASE)
|
|
@echo ====== [Release] C++ Source File "$<" Compiling... ======
|
|
$(CXX_COMPLIER) -c $(CXXFLAGS) $(RELEASE_OPT) -Wa,-a,-ad,-ahlms=$(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(notdir $(<:.cpp=.lst)) $< -o $@
|
|
|
|
# Release 资源脚本文件编译
|
|
$(BUILD_DIR)/$(SUB_DIR_RELEASE)/%.o: %.rc Makefile | $(BUILD_DIR)/$(SUB_DIR_RELEASE)
|
|
@echo ====== [Release] Windows Resource Script File "$<" Compiling... ======
|
|
$(WIN_RES_COMPLIER) $(foreach path,$(WIN_RESOURCE_INCLUDES_PATHS),$(addprefix -I,$(path))) $< -o $@
|
|
|
|
# C Debug 目标文件编译
|
|
$(BUILD_DIR)/$(SUB_DIR_DEBUG)/%.o: %.c Makefile | $(BUILD_DIR)/$(SUB_DIR_DEBUG)
|
|
@echo ====== [Debug] C Source File "$<" Compiling... ======
|
|
$(C_COMPLIER) -c $(CFLAGS) $(DEBUG_OPT) -g -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
# C++ Debug 目标文件编译
|
|
$(BUILD_DIR)/$(SUB_DIR_DEBUG)/%.o: %.cpp Makefile | $(BUILD_DIR)/$(SUB_DIR_DEBUG)
|
|
@echo ====== [Debug] C++ Source File "$<" Compiling... ======
|
|
$(CXX_COMPLIER) -c $(CXXFLAGS) $(DEBUG_OPT) -g -Wa,-a,-ad,-ahlms=$(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(notdir $(<:.cpp=.lst)) $< -o $@
|
|
|
|
# Debug 资源脚本文件编译
|
|
$(BUILD_DIR)/$(SUB_DIR_DEBUG)/%.o: %.rc Makefile | $(BUILD_DIR)/$(SUB_DIR_DEBUG)
|
|
@echo ====== [Debug] Windows Resource Script File "$<" Compiling... ======
|
|
$(WIN_RES_COMPLIER) $(foreach path,$(WIN_RESOURCE_INCLUDES_PATHS),$(addprefix -I,$(path))) $< -o $@
|
|
|
|
|
|
# 依赖关系
|
|
-include $(RELEASE_OBJECTS:.o=.d)
|
|
-include $(DEBUG_OBJECTS:.o=.d) |