0
。在下面的Makefile中,我想目標:%.o : ${SOURCE_DIR}/%.c
和%.o : ${SOURCE_DIR}/%.s
到只有如果編譯源文件已經改變,或者相應的.o目標文件不存在。獲取使我想把我的Makefile文件只編譯修改後的源文件重新編譯只有不變的源文件
不能完全確定什麼是錯在這裏,有人可以提供一些建議嗎?
# 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 [email protected]"
$(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)/[email protected]
@echo
# Target %.o (.s sources)
# ---------------------------------------------------------------------------------------------------------------------
%.o : ${SOURCE_DIR}/%.s # --> Execute only if source changed!!!
@echo "Compiling $<"
$(CC) $(CFLAGS) $< -o $(OUT_DIR)/[email protected]
@echo
# Target: clean
# ---------------------------------------------------------------------------------------------------------------------
clean:
@echo "Cleaning build output..."
@rm -rf $(OUT_DIR)
感謝@Beta,似乎幾乎那裏,但使輸出如下:'沒有規則,使目標'Build/main.o','stm32f4_template.elf''需要。 –
廢品,現在工作100%,我有一個小錯字。謝謝回答! –