Заставить gnu make восстановить объекты, на которые влияет определение компилятора

У меня есть make-файл, который принимает параметры в командной строке

make OPTION_1=1

На основе значения он добавит дополнительные определения компилятора к подмножеству объектов.

ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif

Изменение в определении влияет на содержимое включенного файла заголовка - заглушка или реализация предоставляется объектным файлам.

Как я могу получить make для восстановления файлов, "затронутых" изменением этой опции?

2 ответа

Решение

Я использую файл, чтобы запомнить последнее значение таких параметров, например:

.PHONY: force
compiler_flags: force
    echo '$(CC_FLAGS)' | cmp -s - $@ || echo '$(CC_FLAGS)' > $@

cmp || echo бит означает файл compiler_flags касается только изменения настроек, так что теперь вы можете написать что-то вроде

$(OBJECTS): compiler_flags

вызвать восстановление $(OBJECTS) всякий раз, когда изменяются флаги компилятора. Правило для compiler_flags будет выполняться каждый раз, когда вы запускаете make, но пересборка $(OBJECTS) будет срабатывать, только если compiler_flags файл был фактически изменен.

Поместите их в цель, затем нажмите touch на каждый файл.

Другие вопросы по тегам