Makefile 获取make以仅重新编译未更改的源文件
我试图让我的Makefile只编译更改过的源文件。在下面的Makefile中,我希望目标:Makefile 获取make以仅重新编译未更改的源文件,makefile,Makefile,我试图让我的Makefile只编译更改过的源文件。在下面的Makefile中,我希望目标:%.o:${SOURCE_DIR}/%.c和%.o:${SOURCE_DIR}/%.s仅在源文件已更改或相应的.o对象文件不存在时编译 不完全确定这里出了什么问题,有人能提供一些建议吗 # Project name # -----------------------------------------------------------------------------------------------
%.o:${SOURCE_DIR}/%.c
和%.o:${SOURCE_DIR}/%.s
仅在源文件已更改或相应的.o对象文件不存在时编译
不完全确定这里出了什么问题,有人能提供一些建议吗
# Project name
# ---------------------------------------------------------------------------------------------------------------------
PROJECT_NAME = stm32f4_template
# Source configuration
# ---------------------------------------------------------------------------------------------------------------------
OUT_DIR = ./Build
SOURCE_DIR = ./Src
SOURCES = main.c
SOURCES += startup.s
C_SOURCES = $(filter %.c, $(SOURCES))
ASM_SOURCES += $(filter %.s, $(SOURCES))
OBJECTS = $(C_SOURCES:.c=.o)
OBJECTS += $(ASM_SOURCES:.s=.o)
# Tools
# ---------------------------------------------------------------------------------------------------------------------
CC = arm-none-eabi-gcc
LD = arm-none-eabi-ld -v
CP = arm-none-eabi-objcopy
OD = arm-none-eabi-objdump
# Compilation, linker and other tool flags
# ---------------------------------------------------------------------------------------------------------------------
CFLAGS = -I./ -c -fno-common -O0 -g -mcpu=cortex-m4 -mthumb
LFLAGS = -nostartfiles -TLinker/memory.ld -TLinker/sections.ld
CPFLAGS = -Obinary
ODFLAGS = -S
# Target: all ---------------------------------------------------------------------------------------------------------
#
all: setup $(PROJECT_NAME).elf
@echo "Done! $?"
# Target: setup -------------------------------------------------------------------------------------------------------
#
setup:
@mkdir -p $(OUT_DIR)
# Target: $(PROJECT_NAME).elf
# ---------------------------------------------------------------------------------------------------------------------
$(PROJECT_NAME).elf: $(OBJECTS)
@echo "Linking $@"
$(LD) $(LFLAGS) -o ${OUT_DIR}/main.elf $(OUT_DIR)/main.o
@echo
# Target %.o (.c sources)
# ---------------------------------------------------------------------------------------------------------------------
%.o : ${SOURCE_DIR}/%.c # --> Execute only if source changed!!!
@echo "Compiling $<"
$(CC) $(CFLAGS) $< -o $(OUT_DIR)/$@
@echo
# Target %.o (.s sources)
# ---------------------------------------------------------------------------------------------------------------------
%.o : ${SOURCE_DIR}/%.s # --> Execute only if source changed!!!
@echo "Compiling $<"
$(CC) $(CFLAGS) $< -o $(OUT_DIR)/$@
@echo
# Target: clean
# ---------------------------------------------------------------------------------------------------------------------
clean:
@echo "Cleaning build output..."
@rm -rf $(OUT_DIR)
#项目名称
# ---------------------------------------------------------------------------------------------------------------------
项目名称=stm32f4\u模板
#源配置
# ---------------------------------------------------------------------------------------------------------------------
OUT\u DIR=/构建
源目录=./Src
来源=main.c
SOURCES+=startup.s
C_源=$(过滤器%.C,$(源))
ASM_源+=$(筛选器%.s,$(源))
对象=$(C_源:.C=.o)
对象+=$(ASM_源:.s=.o)
#工具
# ---------------------------------------------------------------------------------------------------------------------
CC=arm none eabi gcc
LD=臂无eabi LD-v
CP=arm none eabi对象复制
OD=臂无eabi objdump
#编译、链接器和其他工具标志
# ---------------------------------------------------------------------------------------------------------------------
CFLAGS=-I./-c-fno common-O0-g-mcpu=cortex-m4-mthumb
LFLAGS=-nostartfiles-TLinker/memory.ld-TLinker/sections.ld
CPFLAGS=-Obinary
ODFLAGS=-S
#目标:全部---------------------------------------------------------------------------------------------------------
#
全部:设置$(项目名称).elf
@echo“完成!$?”
#目标:设置-------------------------------------------------------------------------------------------------------
#
设置:
@mkdir-p$(输出目录)
#目标:$(项目名称).elf
# ---------------------------------------------------------------------------------------------------------------------
$(项目名称)。elf:$(对象)
@回显“链接$@”
$(LD)$(LFLAGS)-o${OUT\u DIR}/main.elf$(OUT\u DIR)/main.o
@回音
#目标%.o(.c源)
# ---------------------------------------------------------------------------------------------------------------------
%.o:${SOURCE_DIR}/%.c#-->仅在源代码更改时执行!!!
@echo“编译$此规则:
%.o : ${SOURCE_DIR}/%.c # --> Execute only if source changed!!!
@echo "Compiling $<"
$(CC) $(CFLAGS) $< -o $(OUT_DIR)/$@
其他%.o规则也是如此。此规则:
%.o : ${SOURCE_DIR}/%.c # --> Execute only if source changed!!!
@echo "Compiling $<"
$(CC) $(CFLAGS) $< -o $(OUT_DIR)/$@
其他%.o规则也是如此。此规则:
%.o : ${SOURCE_DIR}/%.c # --> Execute only if source changed!!!
@echo "Compiling $<"
$(CC) $(CFLAGS) $< -o $(OUT_DIR)/$@
其他%.o规则也是如此。此规则:
%.o : ${SOURCE_DIR}/%.c # --> Execute only if source changed!!!
@echo "Compiling $<"
$(CC) $(CFLAGS) $< -o $(OUT_DIR)/$@
另一个%.o规则也是如此。谢谢@Beta,这似乎差不多了,但生成输出如下:没有规则生成目标“Build/main.o”,这是“stm32f4\u template.elf”所需要的。
。废话,现在100%工作,我有一个小错误。谢谢回答!谢谢@Beta,这似乎差不多了,但生成输出如下s:没有规则生成目标'Build/main.o',这是'stm32f4_template.elf'所需要的。
放弃,现在100%正常工作,我有一个小错误。感谢您的回答!感谢@Beta,这似乎差不多了,但生成输出如下:没有规则生成目标'Build/main.o',stm32f4_template.elf'所需要的。
。放弃它,现在100%正常工作,我有一个小的输入错误。谢谢你的回答!谢谢@Beta,这似乎差不多了,但是make输出如下:没有规则使目标“Build/main.o”,这是“stm32f4\u template.elf”所需要的。
。放弃这个,现在100%工作,我有一个小的输入错误。谢谢你的回答!