Я пытаюсь исправить Makefile, который в настоящее время не обнаруживает изменения исходного файла из-за отсутствия зависимости от исходных файлов. c. Я реализовал шаблонное правило stati c, но оно не может перестроить один объектный файл при изменении одного исходного файла. Он перестроит все изменения.
У меня есть следующее:
ARCHITECTURE_DIR = arm
BUILD_DIR = build
OUTPUT_DIR = $(BUILD_DIR)/$(ARCHITECTURE_DIR)
SDK_DIR = sdks/v4.0
SOURCE_FILES = \
$(SDK_DIR)/alarm.c \
...
CSOURCES = $(filter %.c, $(SOURCE_FILES))
COBJS = $(addprefix $(OUTPUT_DIR)/,$(CSOURCES:.c=.o))
all: PROLOGUE $(COBJS)
$(LD) $(COBJS) -o ...
Ранее файл имел следующее:
$(COBJS): %.o:
@echo 'Building $(notdir $(@:%.o=%.c))...'
@$(CC) $(CFLAGS) -o $@ $(filter %$(@:$(OUTPUT_DIR)/%.o=%.c),$(CSOURCES)) > /dev/null \
Но это не имеет зависимость от файлов. c и, следовательно, не распознает внесенные изменения и перестройку. Я не хочу убирать каждый раз, когда я делаю изменение источника. Я изменил его на следующее:
COBJS = $(CSOURCES:.c=.o)
$(COBJS): %.o: %.c
@echo 'Building $(notdir $(@:%.o=%.c))...'
@$(CC) $(CFLAGS) -o $(addprefix $(OUTPUT_DIR)/,$@) $< > /dev/null \
Но это заставляет его перестраиваться каждый раз, когда объектные файлы помещаются в другой каталог. Есть ли способ сделать так, чтобы он мог найти эти объектные файлы и не восстанавливать их при необходимости?
Спасибо за вашу помощь!