Diff
checker
文本
文本
图像
文档
Excel
文件夹
Legal
Enterprise
桌面版
定价
登录
下载 Diffchecker 桌面版
比较文本
查找两个文本文件之间的差异
工具
历史
实时编辑器
折叠未更改行
关闭换行
视图
拆分
统一
比对精度
智能
单词
字符
语法高亮
选择语法
忽略
文本转换
转到第一个差异
编辑输入
Diffchecker Desktop
运行Diffchecker最安全的方式。获取Diffchecker桌面应用:您的差异永远不会离开您的电脑!
获取桌面版
Untitled diff
创建于
9年前
差异永不过期
清除
导出
分享
解释
19 删除
行
总计
删除
字符
总计
删除
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
172 行
全部复制
25 添加
行
总计
添加
字符
总计
添加
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
172 行
全部复制
复制
已复制
复制
已复制
FROM SDK
12.2
FROM SDK
13.0
# Copyright (c) 2016 Nordic Semiconductor. All Rights Reserved.
# Copyright (c) 2016 Nordic Semiconductor. All Rights Reserved.
#
#
# The information contained herein is property of Nordic Semiconductor ASA.
# The information contained herein is property of Nordic Semiconductor ASA.
# Terms and conditions of usage are described in detail in NORDIC
# Terms and conditions of usage are described in detail in NORDIC
# SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
# SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
#
#
# Licensees are granted free, non-transferable use of the information. NO
# Licensees are granted free, non-transferable use of the information. NO
# WARRANTY of ANY KIND is provided. This heading must NOT be removed from
# WARRANTY of ANY KIND is provided. This heading must NOT be removed from
# the file.
# the file.
PLATFORM_SUFFIX := $(if $(filter Windows%,$(OS)),windows,posix)
PLATFORM_SUFFIX := $(if $(filter Windows%,$(OS)),windows,posix)
TOOLCHAIN_CONFIG_FILE := $(TEMPLATE_PATH)/Makefile.$(PLATFORM_SUFFIX)
TOOLCHAIN_CONFIG_FILE := $(TEMPLATE_PATH)/Makefile.$(PLATFORM_SUFFIX)
include $(TOOLCHAIN_CONFIG_FILE)
include $(TOOLCHAIN_CONFIG_FILE)
# Toolchain commands
# Toolchain commands
复制
已复制
复制
已复制
CC :=
'
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc
'
CC :=
"
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc
"
CXX :=
'
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-c++
'
CXX :=
"
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-c++
"
AS :=
'
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as
'
AS :=
"
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as
"
AR :=
'
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar
'
-r
AR :=
"
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar
"
-r
LD :=
'
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld
'
LD :=
"
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld
"
NM :=
'
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm
'
NM :=
"
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm
"
OBJDUMP :=
'
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump
'
OBJDUMP :=
"
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump
"
OBJCOPY :=
'
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy
'
OBJCOPY :=
"
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy
"
SIZE :=
'
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size
'
SIZE :=
"
$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size
"
$(if $(shell $(CC) --version),,$(info Cannot find: $(CC).) \
$(if $(shell $(CC) --version),,$(info Cannot find: $(CC).) \
$(info Please set values in: "$(abspath $(TOOLCHAIN_CONFIG_FILE))") \
$(info Please set values in: "$(abspath $(TOOLCHAIN_CONFIG_FILE))") \
$(info according to the actual configuration of your system.) \
$(info according to the actual configuration of your system.) \
$(error Cannot continue))
$(error Cannot continue))
# Use ccache on linux if available
# Use ccache on linux if available
CCACHE := $(if $(filter Windows%,$(OS)),, \
CCACHE := $(if $(filter Windows%,$(OS)),, \
$(if $(wildcard /usr/bin/ccache),ccache))
$(if $(wildcard /usr/bin/ccache),ccache))
CC := $(CCACHE) $(CC)
CC := $(CCACHE) $(CC)
MK := mkdir
MK := mkdir
RM := rm -rf
RM := rm -rf
# echo suspend
# echo suspend
ifeq ($(VERBOSE),1)
ifeq ($(VERBOSE),1)
NO_ECHO :=
NO_ECHO :=
else
else
NO_ECHO := @
NO_ECHO := @
endif
endif
# $1 type of item
# $1 type of item
# $2 path to check
# $2 path to check
define ensure_exists
define ensure_exists
$(if $(wildcard $(2)),, $(warning Cannot find $(1): $(2)))
$(if $(wildcard $(2)),, $(warning Cannot find $(1): $(2)))
endef
endef
# $1 object file
# $1 object file
# $2 source file
# $2 source file
define bind_obj_with_src
define bind_obj_with_src
$(eval $(1) := $(2))
$(eval $(1) := $(2))
endef
endef
# $1 object file
# $1 object file
# $2 target name
# $2 target name
define bind_obj_with_target
define bind_obj_with_target
$(eval $(1)T := $(2))
$(eval $(1)T := $(2))
endef
endef
# $1 target name
# $1 target name
# $2 source file name
# $2 source file name
# Note: this additional .o for .s-files is a workaround for issues with make 4.1
# Note: this additional .o for .s-files is a workaround for issues with make 4.1
# from MinGW (it does nothing to remake .s.o files when a rule for .S.o
# from MinGW (it does nothing to remake .s.o files when a rule for .S.o
# files is defined as well).
# files is defined as well).
define get_object_file_name
define get_object_file_name
$(OUTPUT_DIRECTORY)/$(strip $(1))_$(patsubst %.s,%.s.o,$(notdir $(2))).o
$(OUTPUT_DIRECTORY)/$(strip $(1))_$(patsubst %.s,%.s.o,$(notdir $(2))).o
endef
endef
# $1 target name
# $1 target name
# $2 list of source files
# $2 list of source files
define get_object_files
define get_object_files
$(foreach src_file, $(2), \
$(foreach src_file, $(2), \
$(call ensure_exists,source file, $(src_file)) \
$(call ensure_exists,source file, $(src_file)) \
$(eval obj_file := $(call get_object_file_name, $(1), $(src_file))) \
$(eval obj_file := $(call get_object_file_name, $(1), $(src_file))) \
$(eval DEPENDENCIES += $(obj_file:.o=.d)) \
$(eval DEPENDENCIES += $(obj_file:.o=.d)) \
$(call bind_obj_with_src, $(obj_file), $(src_file)) \
$(call bind_obj_with_src, $(obj_file), $(src_file)) \
$(call bind_obj_with_target, $(obj_file), $(1)) \
$(call bind_obj_with_target, $(obj_file), $(1)) \
$(eval $(obj_file): Makefile) \
$(eval $(obj_file): Makefile) \
$(obj_file))
$(obj_file))
endef
endef
# $1 variable name
# $1 variable name
# $2 target name
# $2 target name
define target_specific
define target_specific
$($(addsuffix _$(strip $(2)), $(1)))
$($(addsuffix _$(strip $(2)), $(1)))
endef
endef
# $1 target name
# $1 target name
# $2 link target name
# $2 link target name
define prepare_build
define prepare_build
$(eval DEPENDENCIES :=) \
$(eval DEPENDENCIES :=) \
$(eval $(2): \
$(eval $(2): \
$(call get_object_files, $(1), $(SRC_FILES) \
$(call get_object_files, $(1), $(SRC_FILES) \
$(call target_specific, SRC_FILES, $(1)))) \
$(call target_specific, SRC_FILES, $(1)))) \
$(eval -include $(DEPENDENCIES)) \
$(eval -include $(DEPENDENCIES)) \
$(eval INC_PATHS_$(strip $(1)) := \
$(eval INC_PATHS_$(strip $(1)) := \
$(foreach folder, $(INC_FOLDERS) $(call target_specific, INC_FOLDERS, $(1)), \
$(foreach folder, $(INC_FOLDERS) $(call target_specific, INC_FOLDERS, $(1)), \
$(call ensure_exists,include folder, $(folder)) \
$(call ensure_exists,include folder, $(folder)) \
-I"$(folder)"))
-I"$(folder)"))
endef
endef
INC_PATHS = $(call target_specific, INC_PATHS, $($@T))
INC_PATHS = $(call target_specific, INC_PATHS, $($@T))
# $1 target name
# $1 target name
define define_target
define define_target
$(eval OUTPUT_FILE := $(OUTPUT_DIRECTORY)/$(strip $(1))) \
$(eval OUTPUT_FILE := $(OUTPUT_DIRECTORY)/$(strip $(1))) \
$(eval $(1): $(OUTPUT_FILE).out $(OUTPUT_FILE).hex $(OUTPUT_FILE).bin) \
$(eval $(1): $(OUTPUT_FILE).out $(OUTPUT_FILE).hex $(OUTPUT_FILE).bin) \
$(call prepare_build, $(1), $(OUTPUT_FILE).out)
$(call prepare_build, $(1), $(OUTPUT_FILE).out)
endef
endef
# $1 target name
# $1 target name
# $2 library file name
# $2 library file name
define define_library
define define_library
$(eval $(1) := $(2)) \
$(eval $(1) := $(2)) \
$(call prepare_build, $(1), $(1))
$(call prepare_build, $(1), $(1))
endef
endef
.PHONY: $(TARGETS) default all clean help flash
.PHONY: $(TARGETS) default all clean help flash
all: $(TARGETS)
all: $(TARGETS)
clean:
clean:
$(RM) $(OUTPUT_DIRECTORY)
$(RM) $(OUTPUT_DIRECTORY)
# Create build directories
# Create build directories
$(OUTPUT_DIRECTORY):
$(OUTPUT_DIRECTORY):
$(MK) $@
$(MK) $@
# Create objects from C source files
# Create objects from C source files
$(OUTPUT_DIRECTORY)/%.c.o: | $(OUTPUT_DIRECTORY)
$(OUTPUT_DIRECTORY)/%.c.o: | $(OUTPUT_DIRECTORY)
@echo Compiling file: $(notdir $($@))
@echo Compiling file: $(notdir $($@))
复制
已复制
复制
已复制
$(NO_ECHO)$(CC) -MP -MD -std=c99 $(CFLAGS) $(INC_PATHS) -c -o $@
$($@)
$(NO_ECHO)$(CC) -MP -MD -std=c99 $(CFLAGS) $(INC_PATHS) -c -o $@
"
$($@)
"
# Create objects from C++ source files
# Create objects from C++ source files
$(OUTPUT_DIRECTORY)/%.cpp.o: | $(OUTPUT_DIRECTORY)
$(OUTPUT_DIRECTORY)/%.cpp.o: | $(OUTPUT_DIRECTORY)
@echo Compiling file: $(notdir $($@))
@echo Compiling file: $(notdir $($@))
复制
已复制
复制
已复制
$(NO_ECHO)$(CXX) -MP -MD $(CFLAGS) $(CXXFLAGS) $(INC_PATHS) -c -o $@
$($@)
$(NO_ECHO)$(CXX) -MP -MD $(CFLAGS) $(CXXFLAGS) $(INC_PATHS) -c -o $@
"
$($@)
"
# Create objects from assembly files
# Create objects from assembly files
$(OUTPUT_DIRECTORY)/%.S.o \
$(OUTPUT_DIRECTORY)/%.S.o \
$(OUTPUT_DIRECTORY)/%.s.o.o: | $(OUTPUT_DIRECTORY)
$(OUTPUT_DIRECTORY)/%.s.o.o: | $(OUTPUT_DIRECTORY)
@echo Assembling file: $(notdir $($@))
@echo Assembling file: $(notdir $($@))
复制
已复制
复制
已复制
$(NO_ECHO)$(CC) -MP -MD -std=c99 $(ASMFLAGS) $(INC_PATHS) -c -o $@
$($@)
$(NO_ECHO)$(CC) -MP -MD -std=c99 $(ASMFLAGS) $(INC_PATHS) -c -o $@
"
$($@)
"
export FILE_LIST
export FILE_LIST
DUMP_FILE_LIST := \
DUMP_FILE_LIST := \
"$(MAKE)" -s --no-print-directory -f $(TEMPLATE_PATH)/file_list.mk
"$(MAKE)" -s --no-print-directory -f $(TEMPLATE_PATH)/file_list.mk
# Link object files
# Link object files
%.out:
%.out:
$(eval FILE_LIST := $^ $(LIB_FILES))
$(eval FILE_LIST := $^ $(LIB_FILES))
$(NO_ECHO)$(DUMP_FILE_LIST) > $(@:.out=.in)
$(NO_ECHO)$(DUMP_FILE_LIST) > $(@:.out=.in)
@echo Linking target: $@
@echo Linking target: $@
$(NO_ECHO)$(CC) -Wl,-Map=$(@:.out=.map) $(LDFLAGS) @$(@:.out=.in) -lm -o $@
$(NO_ECHO)$(CC) -Wl,-Map=$(@:.out=.map) $(LDFLAGS) @$(@:.out=.in) -lm -o $@
-@echo ''
-@echo ''
$(NO_ECHO)$(SIZE) $@
$(NO_ECHO)$(SIZE) $@
-@echo ''
-@echo ''
# Create binary .bin file from the .out file
# Create binary .bin file from the .out file
%.bin: %.out
%.bin: %.out
@echo Preparing: $@
@echo Preparing: $@
$(NO_ECHO)$(OBJCOPY) -O binary $< $@
$(NO_ECHO)$(OBJCOPY) -O binary $< $@
# Create binary .hex file from the .out file
# Create binary .hex file from the .out file
%.hex: %.out
%.hex: %.out
@echo Preparing: $@
@echo Preparing: $@
$(NO_ECHO)$(OBJCOPY) -O ihex $< $@
$(NO_ECHO)$(OBJCOPY) -O ihex $< $@
已保存差异
原始文本
打开文件
FROM SDK 12.2 # Copyright (c) 2016 Nordic Semiconductor. All Rights Reserved. # # The information contained herein is property of Nordic Semiconductor ASA. # Terms and conditions of usage are described in detail in NORDIC # SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. # # Licensees are granted free, non-transferable use of the information. NO # WARRANTY of ANY KIND is provided. This heading must NOT be removed from # the file. PLATFORM_SUFFIX := $(if $(filter Windows%,$(OS)),windows,posix) TOOLCHAIN_CONFIG_FILE := $(TEMPLATE_PATH)/Makefile.$(PLATFORM_SUFFIX) include $(TOOLCHAIN_CONFIG_FILE) # Toolchain commands CC := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc' CXX := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-c++' AS := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as' AR := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar' -r LD := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld' NM := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm' OBJDUMP := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump' OBJCOPY := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy' SIZE := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size' $(if $(shell $(CC) --version),,$(info Cannot find: $(CC).) \ $(info Please set values in: "$(abspath $(TOOLCHAIN_CONFIG_FILE))") \ $(info according to the actual configuration of your system.) \ $(error Cannot continue)) # Use ccache on linux if available CCACHE := $(if $(filter Windows%,$(OS)),, \ $(if $(wildcard /usr/bin/ccache),ccache)) CC := $(CCACHE) $(CC) MK := mkdir RM := rm -rf # echo suspend ifeq ($(VERBOSE),1) NO_ECHO := else NO_ECHO := @ endif # $1 type of item # $2 path to check define ensure_exists $(if $(wildcard $(2)),, $(warning Cannot find $(1): $(2))) endef # $1 object file # $2 source file define bind_obj_with_src $(eval $(1) := $(2)) endef # $1 object file # $2 target name define bind_obj_with_target $(eval $(1)T := $(2)) endef # $1 target name # $2 source file name # Note: this additional .o for .s-files is a workaround for issues with make 4.1 # from MinGW (it does nothing to remake .s.o files when a rule for .S.o # files is defined as well). define get_object_file_name $(OUTPUT_DIRECTORY)/$(strip $(1))_$(patsubst %.s,%.s.o,$(notdir $(2))).o endef # $1 target name # $2 list of source files define get_object_files $(foreach src_file, $(2), \ $(call ensure_exists,source file, $(src_file)) \ $(eval obj_file := $(call get_object_file_name, $(1), $(src_file))) \ $(eval DEPENDENCIES += $(obj_file:.o=.d)) \ $(call bind_obj_with_src, $(obj_file), $(src_file)) \ $(call bind_obj_with_target, $(obj_file), $(1)) \ $(eval $(obj_file): Makefile) \ $(obj_file)) endef # $1 variable name # $2 target name define target_specific $($(addsuffix _$(strip $(2)), $(1))) endef # $1 target name # $2 link target name define prepare_build $(eval DEPENDENCIES :=) \ $(eval $(2): \ $(call get_object_files, $(1), $(SRC_FILES) \ $(call target_specific, SRC_FILES, $(1)))) \ $(eval -include $(DEPENDENCIES)) \ $(eval INC_PATHS_$(strip $(1)) := \ $(foreach folder, $(INC_FOLDERS) $(call target_specific, INC_FOLDERS, $(1)), \ $(call ensure_exists,include folder, $(folder)) \ -I"$(folder)")) endef INC_PATHS = $(call target_specific, INC_PATHS, $($@T)) # $1 target name define define_target $(eval OUTPUT_FILE := $(OUTPUT_DIRECTORY)/$(strip $(1))) \ $(eval $(1): $(OUTPUT_FILE).out $(OUTPUT_FILE).hex $(OUTPUT_FILE).bin) \ $(call prepare_build, $(1), $(OUTPUT_FILE).out) endef # $1 target name # $2 library file name define define_library $(eval $(1) := $(2)) \ $(call prepare_build, $(1), $(1)) endef .PHONY: $(TARGETS) default all clean help flash all: $(TARGETS) clean: $(RM) $(OUTPUT_DIRECTORY) # Create build directories $(OUTPUT_DIRECTORY): $(MK) $@ # Create objects from C source files $(OUTPUT_DIRECTORY)/%.c.o: | $(OUTPUT_DIRECTORY) @echo Compiling file: $(notdir $($@)) $(NO_ECHO)$(CC) -MP -MD -std=c99 $(CFLAGS) $(INC_PATHS) -c -o $@ $($@) # Create objects from C++ source files $(OUTPUT_DIRECTORY)/%.cpp.o: | $(OUTPUT_DIRECTORY) @echo Compiling file: $(notdir $($@)) $(NO_ECHO)$(CXX) -MP -MD $(CFLAGS) $(CXXFLAGS) $(INC_PATHS) -c -o $@ $($@) # Create objects from assembly files $(OUTPUT_DIRECTORY)/%.S.o \ $(OUTPUT_DIRECTORY)/%.s.o.o: | $(OUTPUT_DIRECTORY) @echo Assembling file: $(notdir $($@)) $(NO_ECHO)$(CC) -MP -MD -std=c99 $(ASMFLAGS) $(INC_PATHS) -c -o $@ $($@) export FILE_LIST DUMP_FILE_LIST := \ "$(MAKE)" -s --no-print-directory -f $(TEMPLATE_PATH)/file_list.mk # Link object files %.out: $(eval FILE_LIST := $^ $(LIB_FILES)) $(NO_ECHO)$(DUMP_FILE_LIST) > $(@:.out=.in) @echo Linking target: $@ $(NO_ECHO)$(CC) -Wl,-Map=$(@:.out=.map) $(LDFLAGS) @$(@:.out=.in) -lm -o $@ -@echo '' $(NO_ECHO)$(SIZE) $@ -@echo '' # Create binary .bin file from the .out file %.bin: %.out @echo Preparing: $@ $(NO_ECHO)$(OBJCOPY) -O binary $< $@ # Create binary .hex file from the .out file %.hex: %.out @echo Preparing: $@ $(NO_ECHO)$(OBJCOPY) -O ihex $< $@
更改后文本
打开文件
FROM SDK 13.0 # Copyright (c) 2016 Nordic Semiconductor. All Rights Reserved. # # The information contained herein is property of Nordic Semiconductor ASA. # Terms and conditions of usage are described in detail in NORDIC # SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. # # Licensees are granted free, non-transferable use of the information. NO # WARRANTY of ANY KIND is provided. This heading must NOT be removed from # the file. PLATFORM_SUFFIX := $(if $(filter Windows%,$(OS)),windows,posix) TOOLCHAIN_CONFIG_FILE := $(TEMPLATE_PATH)/Makefile.$(PLATFORM_SUFFIX) include $(TOOLCHAIN_CONFIG_FILE) # Toolchain commands CC := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc" CXX := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-c++" AS := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as" AR := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar" -r LD := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld" NM := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm" OBJDUMP := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump" OBJCOPY := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy" SIZE := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size" $(if $(shell $(CC) --version),,$(info Cannot find: $(CC).) \ $(info Please set values in: "$(abspath $(TOOLCHAIN_CONFIG_FILE))") \ $(info according to the actual configuration of your system.) \ $(error Cannot continue)) # Use ccache on linux if available CCACHE := $(if $(filter Windows%,$(OS)),, \ $(if $(wildcard /usr/bin/ccache),ccache)) CC := $(CCACHE) $(CC) MK := mkdir RM := rm -rf # echo suspend ifeq ($(VERBOSE),1) NO_ECHO := else NO_ECHO := @ endif # $1 type of item # $2 path to check define ensure_exists $(if $(wildcard $(2)),, $(warning Cannot find $(1): $(2))) endef # $1 object file # $2 source file define bind_obj_with_src $(eval $(1) := $(2)) endef # $1 object file # $2 target name define bind_obj_with_target $(eval $(1)T := $(2)) endef # $1 target name # $2 source file name # Note: this additional .o for .s-files is a workaround for issues with make 4.1 # from MinGW (it does nothing to remake .s.o files when a rule for .S.o # files is defined as well). define get_object_file_name $(OUTPUT_DIRECTORY)/$(strip $(1))_$(patsubst %.s,%.s.o,$(notdir $(2))).o endef # $1 target name # $2 list of source files define get_object_files $(foreach src_file, $(2), \ $(call ensure_exists,source file, $(src_file)) \ $(eval obj_file := $(call get_object_file_name, $(1), $(src_file))) \ $(eval DEPENDENCIES += $(obj_file:.o=.d)) \ $(call bind_obj_with_src, $(obj_file), $(src_file)) \ $(call bind_obj_with_target, $(obj_file), $(1)) \ $(eval $(obj_file): Makefile) \ $(obj_file)) endef # $1 variable name # $2 target name define target_specific $($(addsuffix _$(strip $(2)), $(1))) endef # $1 target name # $2 link target name define prepare_build $(eval DEPENDENCIES :=) \ $(eval $(2): \ $(call get_object_files, $(1), $(SRC_FILES) \ $(call target_specific, SRC_FILES, $(1)))) \ $(eval -include $(DEPENDENCIES)) \ $(eval INC_PATHS_$(strip $(1)) := \ $(foreach folder, $(INC_FOLDERS) $(call target_specific, INC_FOLDERS, $(1)), \ $(call ensure_exists,include folder, $(folder)) \ -I"$(folder)")) endef INC_PATHS = $(call target_specific, INC_PATHS, $($@T)) # $1 target name define define_target $(eval OUTPUT_FILE := $(OUTPUT_DIRECTORY)/$(strip $(1))) \ $(eval $(1): $(OUTPUT_FILE).out $(OUTPUT_FILE).hex $(OUTPUT_FILE).bin) \ $(call prepare_build, $(1), $(OUTPUT_FILE).out) endef # $1 target name # $2 library file name define define_library $(eval $(1) := $(2)) \ $(call prepare_build, $(1), $(1)) endef .PHONY: $(TARGETS) default all clean help flash all: $(TARGETS) clean: $(RM) $(OUTPUT_DIRECTORY) # Create build directories $(OUTPUT_DIRECTORY): $(MK) $@ # Create objects from C source files $(OUTPUT_DIRECTORY)/%.c.o: | $(OUTPUT_DIRECTORY) @echo Compiling file: $(notdir $($@)) $(NO_ECHO)$(CC) -MP -MD -std=c99 $(CFLAGS) $(INC_PATHS) -c -o $@ "$($@)" # Create objects from C++ source files $(OUTPUT_DIRECTORY)/%.cpp.o: | $(OUTPUT_DIRECTORY) @echo Compiling file: $(notdir $($@)) $(NO_ECHO)$(CXX) -MP -MD $(CFLAGS) $(CXXFLAGS) $(INC_PATHS) -c -o $@ "$($@)" # Create objects from assembly files $(OUTPUT_DIRECTORY)/%.S.o \ $(OUTPUT_DIRECTORY)/%.s.o.o: | $(OUTPUT_DIRECTORY) @echo Assembling file: $(notdir $($@)) $(NO_ECHO)$(CC) -MP -MD -std=c99 $(ASMFLAGS) $(INC_PATHS) -c -o $@ "$($@)" export FILE_LIST DUMP_FILE_LIST := \ "$(MAKE)" -s --no-print-directory -f $(TEMPLATE_PATH)/file_list.mk # Link object files %.out: $(eval FILE_LIST := $^ $(LIB_FILES)) $(NO_ECHO)$(DUMP_FILE_LIST) > $(@:.out=.in) @echo Linking target: $@ $(NO_ECHO)$(CC) -Wl,-Map=$(@:.out=.map) $(LDFLAGS) @$(@:.out=.in) -lm -o $@ -@echo '' $(NO_ECHO)$(SIZE) $@ -@echo '' # Create binary .bin file from the .out file %.bin: %.out @echo Preparing: $@ $(NO_ECHO)$(OBJCOPY) -O binary $< $@ # Create binary .hex file from the .out file %.hex: %.out @echo Preparing: $@ $(NO_ECHO)$(OBJCOPY) -O ihex $< $@
查找差异