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

У меня есть makefile, который принимает параметры в командной строке

make OPTION_1=1

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

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

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

Как я могу заставить make перестроить измененные файлы с помощью этой опции?

Ответ 1

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

.PHONY: force
compiler_flags: force
    echo '$(CC_FLAGS)' | cmp -s - [email protected] || echo '$(CC_FLAGS)' > [email protected]

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

$(OBJECTS): compiler_flags

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

Ответ 2

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