Заставить gnu make восстановить объекты, на которые влияет определение компилятора - PullRequest
24 голосов
/ 13 июля 2010

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

make OPTION_1=1

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

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

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

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

Ответы [ 2 ]

43 голосов
/ 13 июля 2010

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

.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 действительно был изменен.

0 голосов
/ 13 июля 2010

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

...