Заставить GNU make выполнить конкретную цель - PullRequest
0 голосов
/ 21 июня 2010

Я пытаюсь выполнить единственную цель, вызывающую "make cleanlists". Эта цель не имеет предпосылок и должна быть выполнена (в моем понимании) немедленно, не затрагивая другие правила.

.PHONY: cleanlists
cleanlists:
    @echo cleaning source and header lists ..
    @rm -f sourcelist.mk
    @rm -f headerlist.mk
    @echo done. 

Но в случае, если эти два файла не существуют, другие правила, имеющие эти файлы в качестве предварительных условий, проверяются и в конечном итоге приводят к их регенерации перед выполнением цели 'cleanlists'.

Есть ли какой-нибудь простой способ заставить make избежать такого поведения?

Спасибо

1 Ответ

1 голос
/ 22 июня 2010

Имена .mk этих двух файлов предполагают, что в другом месте вашего make-файла вы включаете их в качестве содержимого make-файла для анализа и выполнения:

include sourcelist.mk
include headerlist.mk

Для выполнения вашегоКоманда make cleanlists с обновленным make-файлом, make регенерирует эти файлы и разбирает весь make-файл перед вычислением зависимостей и выполнением команд, как описано в Как переделываются make-файлы .

Это не имеет смысла для чистого правила, но make этого не знает.Вы можете использовать этот трюк из руководства для особой обработки этого конкретного правила:

ifneq "$(MAKECMDGOALS)" "cleanlists"
include sourcelist.mk
include headerlist.mk
endif
...