Compare commits
2 Commits
2af81a043c
...
28edb68744
Author | SHA1 | Date | |
---|---|---|---|
28edb68744 | |||
4d684a57ae |
3
.vscode/c_cpp_properties.json
vendored
3
.vscode/c_cpp_properties.json
vendored
@ -11,8 +11,7 @@
|
||||
"_UNICODE"
|
||||
],
|
||||
"cStandard": "c17",
|
||||
"cppStandard": "c++17",
|
||||
"intelliSenseMode": "windows-gcc-x64"
|
||||
"cppStandard": "c++17"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
|
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@ -5,8 +5,8 @@
|
||||
"name": "[SrcToA2L]构建并调试",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "project_build_task", // 预构建脚本
|
||||
"program": "${workspaceFolder}\\Build\\SrcToA2L.exe", // 调试目标
|
||||
"preLaunchTask": "project_debug_build_task", // 预构建脚本
|
||||
"program": "${workspaceFolder}\\Build\\Debug\\SrcToA2L.exe", // 调试目标
|
||||
"args": [ // 附加参数
|
||||
".\\Test\\typedef.h",
|
||||
".\\Test\\source_code.c",
|
||||
|
7
.vscode/tasks.json
vendored
7
.vscode/tasks.json
vendored
@ -1,14 +1,15 @@
|
||||
{
|
||||
"tasks": [
|
||||
{
|
||||
"label": "project_build_task", //定义的Task标签
|
||||
"label": "project_debug_build_task", //定义的Task标签
|
||||
"type": "shell", //Task执行的类型
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}" // 工作目录
|
||||
},
|
||||
"command": "make", //运行的命令
|
||||
"args": [
|
||||
"-j4" // 附加参数
|
||||
"args": [ // 附加参数
|
||||
"debug",
|
||||
"-j4"
|
||||
],
|
||||
}
|
||||
],
|
||||
|
280
Makefile
280
Makefile
@ -1,161 +1,223 @@
|
||||
# 目标文件名称
|
||||
TARGET_FILE_NAME = SrcToA2L
|
||||
|
||||
# 编译路径
|
||||
# 编译目录
|
||||
BUILD_DIR = Build
|
||||
|
||||
# 工具链前缀
|
||||
PREFIX = \
|
||||
# Release 编译子目录
|
||||
SUB_DIR_RELEASE = Release
|
||||
|
||||
# 调试选项
|
||||
DEBUG = 1
|
||||
# Debug 编译子目录
|
||||
SUB_DIR_DEBUG = Debug
|
||||
|
||||
# GUI或CUI编译选项
|
||||
# Release 优化等级
|
||||
RELEASE_OPT = -Os
|
||||
|
||||
# Debug 优化等级
|
||||
DEBUG_OPT = -O0
|
||||
|
||||
# GUI或CUI编译选项 [0]CUI/Console [1]GUI
|
||||
GUI = 0
|
||||
|
||||
# C编译标准,等号后面不能有空格
|
||||
C_STD =c17
|
||||
# C编译标准
|
||||
C_STD = c17
|
||||
|
||||
# C++编译标准,等号后面不能有空格
|
||||
CXX_STD =c++17
|
||||
# C++编译标准
|
||||
CXX_STD = c++17
|
||||
|
||||
#输入源文件字符编码定义,等号后不能有空格
|
||||
INPUT_CHAR_CODING =UTF-8
|
||||
# 源文件编码定义
|
||||
INPUT_CHAR_ENCODING = UTF-8
|
||||
|
||||
#输出单字节字符编码定义,等号后不能有空格
|
||||
OUTPUT_CHAR_CODING =GBK
|
||||
# 编译产物单字节字符(char)编码定义
|
||||
OUTPUT_CHAR_ENCODING = GBK
|
||||
|
||||
#输出宽字符编码定义,等号后不能有空格
|
||||
OUTPUT_WCHAR_CODING =UTF-16LE
|
||||
# 编译产物宽字符(wchar_t)编码定义
|
||||
OUTPUT_WCHAR_ENCODING = UTF-16LE
|
||||
|
||||
# 优化等级
|
||||
OPT = -Og
|
||||
# 编译工具前缀
|
||||
COMPLIER_PREFIX = \
|
||||
|
||||
# C编译工具
|
||||
CC = $(PREFIX)gcc
|
||||
C_COMPLIER = $(strip $(COMPLIER_PREFIX))gcc
|
||||
|
||||
# C++编译工具
|
||||
CXX = $(PREFIX)g++
|
||||
C++_COMPLIER = $(strip $(COMPLIER_PREFIX))g++
|
||||
|
||||
# Win32 资源文件编译工具
|
||||
WIN32_RES = windres
|
||||
# Windows 资源文件编译工具
|
||||
WIN_RES_COMPLIER = windres
|
||||
|
||||
##################################################################################
|
||||
|
||||
# 链接库
|
||||
LIB_LINK = \
|
||||
LIB_LINK = \
|
||||
|
||||
# C定义
|
||||
C_DEFS = \
|
||||
-D_UNICODE \
|
||||
-DUNICODE
|
||||
C_DEFS = \
|
||||
_UNICODE \
|
||||
UNICODE \
|
||||
|
||||
# C头文件目录
|
||||
C_INCLUDES = \
|
||||
C_INCLUDES_PATHS = \
|
||||
|
||||
# C源文件
|
||||
C_SOURCES = \
|
||||
# C源文件目录
|
||||
C_SOURCES_PATHS = \
|
||||
|
||||
# C额外单个源文件
|
||||
C_EXTERA_SOURCES = \
|
||||
|
||||
# C++定义
|
||||
CXX_DEFS = \
|
||||
CXX_DEFS = \
|
||||
_UNICODE \
|
||||
UNICODE \
|
||||
|
||||
# C++ 头文件目录
|
||||
CXX_INCLUDES = \
|
||||
-IInc \
|
||||
CXX_INCLUDES_PATHS = \
|
||||
Inc \
|
||||
|
||||
# C++源文件
|
||||
CXX_SOURCES = \
|
||||
Src/Main.cpp \
|
||||
Src/Tool_Functions.cpp \
|
||||
Src/Core_Functions.cpp \
|
||||
Src/Global_Variables.cpp \
|
||||
# C++源文件目录
|
||||
CXX_SOURCES_PATHS = \
|
||||
Src \
|
||||
|
||||
# 资源文件
|
||||
WIN32_RES_LISTS = \
|
||||
# C++额外单个源文件
|
||||
CXX_EXTERA_SOURCES = \
|
||||
|
||||
# Windows 资源文件脚本头文件路径
|
||||
WIN_RESOURCE_INCLUDES_PATHS = \
|
||||
|
||||
# Windows 资源文件脚本列表
|
||||
WIN_RESOURCE_SCRIPTS = \
|
||||
|
||||
##################################################################################
|
||||
|
||||
# C编译选项
|
||||
CFLAGS = $(C_DEFS) $(C_INCLUDES) $(OPT) -std=$(C_STD) \
|
||||
-finput-charset=$(INPUT_CHAR_CODING) \
|
||||
-fexec-charset=$(OUTPUT_CHAR_CODING) \
|
||||
-fwide-exec-charset=$(OUTPUT_WCHAR_CODING) \
|
||||
-static \
|
||||
-Wall \
|
||||
|
||||
# 生成依赖相关信息
|
||||
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
|
||||
|
||||
# 调试选项
|
||||
ifeq ($(DEBUG), 1)
|
||||
CFLAGS += -g
|
||||
endif
|
||||
|
||||
# GUI与CUI选项
|
||||
ifeq ($(GUI), 1)
|
||||
CFLAGS += -mwindows
|
||||
else
|
||||
CFLAGS += -mconsole
|
||||
endif
|
||||
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 = -lstdc++ $(CFLAGS:$(C_STD)=$(CXX_STD)) $(CXX_DEFS) $(CXX_INCLUDES)
|
||||
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,$(BUILD_DIR)/$(TARGET_FILE_NAME).map
|
||||
# 链接选项
|
||||
LDFLAGS = -Wl,-Map,$(basename $@).map \
|
||||
|
||||
# C目标文件目录关联
|
||||
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
|
||||
vpath %.c $(sort $(dir $(C_SOURCES)))
|
||||
##################################################################################
|
||||
|
||||
# C++目标文件目录关联
|
||||
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CXX_SOURCES:.cpp=.o)))
|
||||
vpath %.cpp $(sort $(dir $(CXX_SOURCES)))
|
||||
# GUI与CUI选项附加
|
||||
ifeq ($(GUI), 1)
|
||||
LDFLAGS += -mwindows
|
||||
else
|
||||
LDFLAGS += -mconsole
|
||||
endif
|
||||
|
||||
# 资源文件目录关联
|
||||
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(WIN32_RES_LISTS:.rc=.o)))
|
||||
vpath %.rc $(sort $(dir $(WIN32_RES_LISTS)))
|
||||
# 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))
|
||||
|
||||
# Make编译任务
|
||||
all: $(BUILD_DIR)/$(TARGET_FILE_NAME).exe
|
||||
# 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))
|
||||
|
||||
# C目标文件编译
|
||||
$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
|
||||
@echo ====== C Source File "$<" Compiling... ======
|
||||
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
|
||||
# Windows资源文件及索引目录关联
|
||||
OBJECTS += $(notdir $(WIN_RESOURCE_SCRIPTS:.rc=.o))
|
||||
vpath %.rc $(sort $(dir $(WIN_RESOURCE_SCRIPTS)))
|
||||
|
||||
# C++ 目标文件编译编译
|
||||
$(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR)
|
||||
@echo ====== C++ Source File "$<" Compiling... ======
|
||||
$(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-ahlms=$(BUILD_DIR)/$(notdir $(<:.cpp=.lst)) $< -o $@
|
||||
|
||||
# 资源文件编译编译
|
||||
$(BUILD_DIR)/%.o: %.rc Makefile | $(BUILD_DIR)
|
||||
@echo ====== Win32 Resources File "$<" Compiling... ======
|
||||
$(WIN32_RES) $< -o $@
|
||||
# Release 目标文件
|
||||
RELEASE_OBJECTS = $(addprefix $(BUILD_DIR)/$(SUB_DIR_RELEASE)/,$(OBJECTS))
|
||||
|
||||
# 生成可执行文件
|
||||
$(BUILD_DIR)/$(TARGET_FILE_NAME).exe: $(OBJECTS) Makefile
|
||||
@echo ====== All File Compiled. Now Linking... ======
|
||||
$(CXX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) -o $@ $(LIB_LINK)
|
||||
@echo ====== Program Link Finished ======
|
||||
# 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):
|
||||
mkdir $@
|
||||
powershell mkdir $@
|
||||
|
||||
# 清除任务
|
||||
clean:$(BUILD_DIR)
|
||||
powershell rm -r $(BUILD_DIR)
|
||||
# Release 工作目录生成
|
||||
$(BUILD_DIR)/$(SUB_DIR_RELEASE): | $(BUILD_DIR)
|
||||
powershell mkdir $@
|
||||
|
||||
# 运行任务
|
||||
run:all
|
||||
$(BUILD_DIR)/$(TARGET_FILE_NAME).exe
|
||||
# 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... ======
|
||||
$(C++_COMPLIER) $(RELEASE_OBJECTS) -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... ======
|
||||
$(C++_COMPLIER) $(DEBUG_OBJECTS) -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... ======
|
||||
$(C++_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... ======
|
||||
$(C++_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 $@
|
||||
|
||||
# 发行编译
|
||||
release:$(BUILD_DIR) $(RELEASE_DIR)
|
||||
powershell rm -r $(BUILD_DIR)
|
||||
make DEBUG=0
|
||||
powershell rm $(BUILD_DIR)/*.o
|
||||
powershell rm $(BUILD_DIR)/*.d
|
||||
powershell rm $(BUILD_DIR)/*.lst
|
||||
powershell rm $(BUILD_DIR)/*.map
|
||||
|
||||
# 依赖关系
|
||||
-include $(wildcard $(BUILD_DIR)/*.d)
|
||||
-include $(wildcard $(BUILD_DIR)/$(SUB_DIR_RELEASE)*.d)
|
||||
-include $(wildcard $(BUILD_DIR)/$(SUB_DIR_DEBUG)*.d)
|
12
README.md
12
README.md
@ -13,7 +13,10 @@
|
||||
|
||||
工具支持结构体类型解析(内嵌结构体成员的结构体除外)、地址匹配、4字节地址对齐、常量宏定义识别、记录布局补全;
|
||||
## 如何使用
|
||||
首先需要进行一些准备,工具需要知道你要将哪些内容生成为标定量,哪些内容生成为观测量,为此你需要按照如下示例将特定的标记段插入原始代码中:
|
||||
|
||||
你可以在[Releases](/releases)处找到已经预构建好的可执行文件,也可以自行构建;
|
||||
|
||||
工具需要知道你要将哪些内容生成为标定量,哪些内容生成为观测量,为此你需要按照如下示例将特定的标记段插入原始代码中:
|
||||
|
||||
```c
|
||||
// .\Test\source_code.c
|
||||
@ -103,14 +106,15 @@ variable_type_enum solve_variable_type(const char *type_str)...
|
||||
#define VALUE_3 VALUE_1 // X
|
||||
```
|
||||
## 关于构建
|
||||
本仓库所使用的构建环境为:
|
||||
[mingw-w64\i686-14.2.0-release-win32-dwarf-ucrt-rt_v12-rev2](https://github.com/niXman/mingw-builds-binaries/releases/tag/14.2.0-rt_v12-rev2)
|
||||
本仓库所使用的构建平台及环境为如下:
|
||||
OS:Windows11 Professional 24H2 (26100.4652)
|
||||
Tool Chain: [mingw-w64\i686-14.2.0-release-win32-dwarf-ucrt-rt_v12-rev2](https://github.com/niXman/mingw-builds-binaries/releases/tag/14.2.0-rt_v12-rev2)
|
||||
|
||||
构建关系由 `Makefile` 组织,使用 `C17`、`C++17` 标准,但由于并未使用高级特性,构建标准可自行调整(按理说 `C98`、`C++98` 应该也行);
|
||||
|
||||
完善构建环境后,在工作目录下使用 `make`、`mingw32-make` 即可进行构建;
|
||||
|
||||
**Linux环境下也可以进行构建,但需要对 `Makefile` 进行少量修改**;
|
||||
本工具仅使用标准库,完全具备跨平台支持,但在其他平台、环境下需要对 `Makefile` 进行少量修改;
|
||||
|
||||
## 主要目录及说明
|
||||
Git-Storage 本仓库目录
|
||||
|
Loading…
x
Reference in New Issue
Block a user