2010-10-06 2 views
16

Когда я изменяю Makefile, его правила могут быть изменены, поэтому их следует переоценить, но make, похоже, не так думает.все правила зависят от самого Makefile

Есть ли способ сказать в Makefile, что все его цели, независимо от того, что зависит от самого Makefile? (Независимо от его названия.)

Я использую GNU make.

ответ

12

Это похоже на еще одну простую, полезную и логичную вещь, которую Make должен уметь делать, но это не так.

Вот обходной путь. Если правило clean настроено правильно, Make может выполнять его всякий раз, когда make-файл был изменен, используя пустой файл dummy в качестве маркера.

-include dummy 

dummy: Makefile 
    @touch [email protected] 
    @$(MAKE) -s clean 

Это будет работать для большинства целей, то есть цели, которые сами файлы и которые удалены чистые, а также любые цели, которые зависят от них. Цели побочного эффекта и некоторые цели PHONY проскальзывают через сеть.

+0

Приятный трюк, но если я хочу, чтобы все мои зависимости были переделаны (это занимает около 30 минут в моем нынешнем проекте), я сам назову 'make clean'. – reinierpost

+0

Возникает связанный с этим вопрос: как автоматически генерировать правила для 'make clean'? В моем нынешнем Makefile нет ни одного. – reinierpost

+9

@reinierpost: подождите минуту. Разве вы не хотите, чтобы все зависимости были переделаны, если файл makefile был изменен? Разве вы не хотите, чтобы все они зависели от самого файла makefile? Разве это не все? – Beta

1

Единственный ответ, который я знаю, - это явно добавить makefile в зависимости. Например, %.o: %.c makefile $(CC) $(CFLAGS) -c $<

+1

Хорошая идея добавить '$ (CPPFLAGS)' к правилу, чтобы соответствовать соответствующему [неявное правило] (https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html# Каталог-оф-правил) – juanchopanza

Смежные вопросы