New Makefile modified && Vscode debug config set
This commit is contained in:
parent
2af81a043c
commit
4d684a57ae
3
.vscode/c_cpp_properties.json
vendored
3
.vscode/c_cpp_properties.json
vendored
@ -11,8 +11,7 @@
|
|||||||
"_UNICODE"
|
"_UNICODE"
|
||||||
],
|
],
|
||||||
"cStandard": "c17",
|
"cStandard": "c17",
|
||||||
"cppStandard": "c++17",
|
"cppStandard": "c++17"
|
||||||
"intelliSenseMode": "windows-gcc-x64"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"version": 4
|
"version": 4
|
||||||
|
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@ -5,8 +5,8 @@
|
|||||||
"name": "[SrcToA2L]构建并调试",
|
"name": "[SrcToA2L]构建并调试",
|
||||||
"type": "cppdbg",
|
"type": "cppdbg",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"preLaunchTask": "project_build_task", // 预构建脚本
|
"preLaunchTask": "project_debug_build_task", // 预构建脚本
|
||||||
"program": "${workspaceFolder}\\Build\\SrcToA2L.exe", // 调试目标
|
"program": "${workspaceFolder}\\Build\\Debug\\SrcToA2L.exe", // 调试目标
|
||||||
"args": [ // 附加参数
|
"args": [ // 附加参数
|
||||||
".\\Test\\typedef.h",
|
".\\Test\\typedef.h",
|
||||||
".\\Test\\source_code.c",
|
".\\Test\\source_code.c",
|
||||||
|
7
.vscode/tasks.json
vendored
7
.vscode/tasks.json
vendored
@ -1,14 +1,15 @@
|
|||||||
{
|
{
|
||||||
"tasks": [
|
"tasks": [
|
||||||
{
|
{
|
||||||
"label": "project_build_task", //定义的Task标签
|
"label": "project_debug_build_task", //定义的Task标签
|
||||||
"type": "shell", //Task执行的类型
|
"type": "shell", //Task执行的类型
|
||||||
"options": {
|
"options": {
|
||||||
"cwd": "${workspaceFolder}" // 工作目录
|
"cwd": "${workspaceFolder}" // 工作目录
|
||||||
},
|
},
|
||||||
"command": "make", //运行的命令
|
"command": "make", //运行的命令
|
||||||
"args": [
|
"args": [ // 附加参数
|
||||||
"-j4" // 附加参数
|
"debug",
|
||||||
|
"-j4"
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
280
Makefile
280
Makefile
@ -1,161 +1,223 @@
|
|||||||
# 目标文件名称
|
# 目标文件名称
|
||||||
TARGET_FILE_NAME = SrcToA2L
|
TARGET_FILE_NAME = SrcToA2L
|
||||||
|
|
||||||
# 编译路径
|
# 编译目录
|
||||||
BUILD_DIR = Build
|
BUILD_DIR = Build
|
||||||
|
|
||||||
# 工具链前缀
|
# Release 编译子目录
|
||||||
PREFIX = \
|
SUB_DIR_RELEASE = Release
|
||||||
|
|
||||||
# 调试选项
|
# Debug 编译子目录
|
||||||
DEBUG = 1
|
SUB_DIR_DEBUG = Debug
|
||||||
|
|
||||||
# GUI或CUI编译选项
|
# Release 优化等级
|
||||||
|
RELEASE_OPT = -Os
|
||||||
|
|
||||||
|
# Debug 优化等级
|
||||||
|
DEBUG_OPT = -O0
|
||||||
|
|
||||||
|
# GUI或CUI编译选项 [0]CUI/Console [1]GUI
|
||||||
GUI = 0
|
GUI = 0
|
||||||
|
|
||||||
# C编译标准,等号后面不能有空格
|
# C编译标准
|
||||||
C_STD =c17
|
C_STD = c17
|
||||||
|
|
||||||
# C++编译标准,等号后面不能有空格
|
# C++编译标准
|
||||||
CXX_STD =c++17
|
CXX_STD = c++17
|
||||||
|
|
||||||
#输入源文件字符编码定义,等号后不能有空格
|
# 源文件编码定义
|
||||||
INPUT_CHAR_CODING =UTF-8
|
INPUT_CHAR_ENCODING = UTF-8
|
||||||
|
|
||||||
#输出单字节字符编码定义,等号后不能有空格
|
# 编译产物单字节字符(char)编码定义
|
||||||
OUTPUT_CHAR_CODING =GBK
|
OUTPUT_CHAR_ENCODING = GBK
|
||||||
|
|
||||||
#输出宽字符编码定义,等号后不能有空格
|
# 编译产物宽字符(wchar_t)编码定义
|
||||||
OUTPUT_WCHAR_CODING =UTF-16LE
|
OUTPUT_WCHAR_ENCODING = UTF-16LE
|
||||||
|
|
||||||
# 优化等级
|
# 编译工具前缀
|
||||||
OPT = -Og
|
COMPLIER_PREFIX = \
|
||||||
|
|
||||||
# C编译工具
|
# C编译工具
|
||||||
CC = $(PREFIX)gcc
|
C_COMPLIER = $(strip $(COMPLIER_PREFIX))gcc
|
||||||
|
|
||||||
# C++编译工具
|
# C++编译工具
|
||||||
CXX = $(PREFIX)g++
|
C++_COMPLIER = $(strip $(COMPLIER_PREFIX))g++
|
||||||
|
|
||||||
# Win32 资源文件编译工具
|
# Windows 资源文件编译工具
|
||||||
WIN32_RES = windres
|
WIN_RES_COMPLIER = windres
|
||||||
|
|
||||||
|
##################################################################################
|
||||||
|
|
||||||
# 链接库
|
# 链接库
|
||||||
LIB_LINK = \
|
LIB_LINK = \
|
||||||
|
|
||||||
# C定义
|
# C定义
|
||||||
C_DEFS = \
|
C_DEFS = \
|
||||||
-D_UNICODE \
|
_UNICODE \
|
||||||
-DUNICODE
|
UNICODE \
|
||||||
|
|
||||||
# C头文件目录
|
# C头文件目录
|
||||||
C_INCLUDES = \
|
C_INCLUDES_PATHS = \
|
||||||
|
|
||||||
# C源文件
|
# C源文件目录
|
||||||
C_SOURCES = \
|
C_SOURCES_PATHS = \
|
||||||
|
|
||||||
|
# C额外单个源文件
|
||||||
|
C_EXTERA_SOURCES = \
|
||||||
|
|
||||||
# C++定义
|
# C++定义
|
||||||
CXX_DEFS = \
|
CXX_DEFS = \
|
||||||
|
_UNICODE \
|
||||||
|
UNICODE \
|
||||||
|
|
||||||
# C++ 头文件目录
|
# C++ 头文件目录
|
||||||
CXX_INCLUDES = \
|
CXX_INCLUDES_PATHS = \
|
||||||
-IInc \
|
Inc \
|
||||||
|
|
||||||
# C++源文件
|
# C++源文件目录
|
||||||
CXX_SOURCES = \
|
CXX_SOURCES_PATHS = \
|
||||||
Src/Main.cpp \
|
Src \
|
||||||
Src/Tool_Functions.cpp \
|
|
||||||
Src/Core_Functions.cpp \
|
|
||||||
Src/Global_Variables.cpp \
|
|
||||||
|
|
||||||
# 资源文件
|
# C++额外单个源文件
|
||||||
WIN32_RES_LISTS = \
|
CXX_EXTERA_SOURCES = \
|
||||||
|
|
||||||
|
# Windows 资源文件脚本头文件路径
|
||||||
|
WIN_RESOURCE_INCLUDES_PATHS = \
|
||||||
|
|
||||||
|
# Windows 资源文件脚本列表
|
||||||
|
WIN_RESOURCE_SCRIPTS = \
|
||||||
|
|
||||||
|
##################################################################################
|
||||||
|
|
||||||
# C编译选项
|
# C编译选项
|
||||||
CFLAGS = $(C_DEFS) $(C_INCLUDES) $(OPT) -std=$(C_STD) \
|
CFLAGS = $(foreach text,$(C_DEFS),$(addprefix -D,$(text))) \
|
||||||
-finput-charset=$(INPUT_CHAR_CODING) \
|
$(foreach path,$(C_INCLUDES_PATHS),$(addprefix -I,$(path))) \
|
||||||
-fexec-charset=$(OUTPUT_CHAR_CODING) \
|
-std=$(strip $(C_STD)) \
|
||||||
-fwide-exec-charset=$(OUTPUT_WCHAR_CODING) \
|
-finput-charset=$(strip $(INPUT_CHAR_ENCODING)) \
|
||||||
-static \
|
-fexec-charset=$(strip $(OUTPUT_CHAR_ENCODING)) \
|
||||||
-Wall \
|
-fwide-exec-charset=$(strip $(OUTPUT_WCHAR_ENCODING)) \
|
||||||
|
-static \
|
||||||
# 生成依赖相关信息
|
-Wall \
|
||||||
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
|
-MMD -MP -MF"$(@:%.o=%.d)" \
|
||||||
|
|
||||||
# 调试选项
|
|
||||||
ifeq ($(DEBUG), 1)
|
|
||||||
CFLAGS += -g
|
|
||||||
endif
|
|
||||||
|
|
||||||
# GUI与CUI选项
|
|
||||||
ifeq ($(GUI), 1)
|
|
||||||
CFLAGS += -mwindows
|
|
||||||
else
|
|
||||||
CFLAGS += -mconsole
|
|
||||||
endif
|
|
||||||
|
|
||||||
# C++编译选项
|
# 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++目标文件目录关联
|
# GUI与CUI选项附加
|
||||||
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CXX_SOURCES:.cpp=.o)))
|
ifeq ($(GUI), 1)
|
||||||
vpath %.cpp $(sort $(dir $(CXX_SOURCES)))
|
LDFLAGS += -mwindows
|
||||||
|
else
|
||||||
|
LDFLAGS += -mconsole
|
||||||
|
endif
|
||||||
|
|
||||||
# 资源文件目录关联
|
# C目标文件及索引目录关联
|
||||||
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(WIN32_RES_LISTS:.rc=.o)))
|
OBJECTS = $(notdir $(C_EXTERA_SOURCES:.c=.o))
|
||||||
vpath %.rc $(sort $(dir $(WIN32_RES_LISTS)))
|
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编译任务
|
# C++目标文件及索引目录关联
|
||||||
all: $(BUILD_DIR)/$(TARGET_FILE_NAME).exe
|
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目标文件编译
|
# Windows资源文件及索引目录关联
|
||||||
$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
|
OBJECTS += $(notdir $(WIN_RESOURCE_SCRIPTS:.rc=.o))
|
||||||
@echo ====== C Source File "$<" Compiling... ======
|
vpath %.rc $(sort $(dir $(WIN_RESOURCE_SCRIPTS)))
|
||||||
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
|
|
||||||
|
|
||||||
# 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 $@
|
|
||||||
|
|
||||||
# 资源文件编译编译
|
# Release 目标文件
|
||||||
$(BUILD_DIR)/%.o: %.rc Makefile | $(BUILD_DIR)
|
RELEASE_OBJECTS = $(addprefix $(BUILD_DIR)/$(SUB_DIR_RELEASE)/,$(OBJECTS))
|
||||||
@echo ====== Win32 Resources File "$<" Compiling... ======
|
|
||||||
$(WIN32_RES) $< -o $@
|
|
||||||
|
|
||||||
# 生成可执行文件
|
# Debug 目标文件
|
||||||
$(BUILD_DIR)/$(TARGET_FILE_NAME).exe: $(OBJECTS) Makefile
|
DEBUG_OBJECTS = $(addprefix $(BUILD_DIR)/$(SUB_DIR_DEBUG)/,$(OBJECTS))
|
||||||
@echo ====== All File Compiled. Now Linking... ======
|
|
||||||
$(CXX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) -o $@ $(LIB_LINK)
|
|
||||||
@echo ====== Program Link Finished ======
|
|
||||||
|
|
||||||
# 生成编译目录
|
##################################################################################
|
||||||
|
|
||||||
|
# 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):
|
$(BUILD_DIR):
|
||||||
mkdir $@
|
powershell mkdir $@
|
||||||
|
|
||||||
# 清除任务
|
# Release 工作目录生成
|
||||||
clean:$(BUILD_DIR)
|
$(BUILD_DIR)/$(SUB_DIR_RELEASE): | $(BUILD_DIR)
|
||||||
powershell rm -r $(BUILD_DIR)
|
powershell mkdir $@
|
||||||
|
|
||||||
# 运行任务
|
# Debug 工作目录生成
|
||||||
run:all
|
$(BUILD_DIR)/$(SUB_DIR_DEBUG): | $(BUILD_DIR)
|
||||||
$(BUILD_DIR)/$(TARGET_FILE_NAME).exe
|
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)
|
Loading…
x
Reference in New Issue
Block a user