Я пытаюсь заставить мой Makefile скомпилировать только измененные исходные файлы. В приведенном ниже файле Makefile мне нужны цели: %.o : ${SOURCE_DIR}/%.c
и %.o : ${SOURCE_DIR}/%.s
- скомпилировать, если исходный файл был изменен, или соответствующий. Объектный файл не существует.Получите make, чтобы перекомпилировать только неизменные исходные файлы
Не совсем уверен, что здесь не так, может кто-нибудь предложить вам совет?
# 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%, у меня была небольшая опечатка. Спасибо за ответ! –