2010-06-21 4 views
0

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

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

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

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

Благодаря

+0

Я не понимаю. Вы говорите, что «делать чистые списки» не просто избавляются от этих файлов? –

+0

НЕТ, make создает эти файлы перед их удалением (в случае, если они не существуют при вызове make) – rainer

+0

Это очень странно. Не могли бы вы опубликовать весь файл makefile, если он маленький, или если он большой, попробуйте удалить части, пока они не станут достаточно маленькими, чтобы опубликовать или проблема внезапно исчезнет (что даст вам большой ключ). – Beta

ответ

1

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

include sourcelist.mk 
include headerlist.mk 

Для того, чтобы выполнить ваш make cleanlists команда с обновленным makefile, make восстанавливает эти файлы и повторно обрабатывает весь файл makefile перед вычислением зависимостей и выполнением команд, как описано в How Makefiles Are Remade.

Это не имеет смысла для чистого правила, но сделать не знает этого. Вы можете использовать this trick from the manual для особого использования этого конкретного правила:

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

Спасибо: Это работает очень хорошо! – rainer

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