Как заставить make запускать чистую цель, если makefile изменился - PullRequest
9 голосов
/ 05 мая 2011

Если makefile изменится, make перестроит все цели, верно?

Но как сказать make , что если после make-файл изменится, он запустит make clean и затем make?

Или как дать команду make запустить какую-то другую команду в этой ситуации? Должен ли я написать особую цель?

Ответы [ 3 ]

4 голосов
/ 05 мая 2011

Грубый, но эффективный (я не могу придумать ничего более изящного):

include marker

marker: Makefile
    @touch $@
    $(MAKE) clean
    $(MAKE)
4 голосов
/ 05 мая 2011

Вы могли бы попробовать это:

all: Makefile.uptodate yourMainTarget

Makefile.uptodate: Makefile
    make clean
    touch Makefile.uptodate

Я не эксперт make, поэтому я не знаю, ужасный ли это хак, но это работало в моем ограниченномтесты; -)

2 голосов
/ 24 августа 2011

Я считаю, что вы хотите запускать чистую автоматически, потому что вы хотите, чтобы определенные цели перестраивались при каждом вызове make. Это может быть достигнуто путем добавления зависимости с именем FORCE к правилу, цель которого вы хотите построить всегда, а затем определите FORCE следующим образом: т.е. без правила и без зависимости.

FORCE:

Пожалуйста, смотрите http://www.gnu.org/software/make/manual/make.html#Force-Targets

Если вы хотите, чтобы все файлы были перекомпилированы, вы добавляете в make-файл следующее:

%.o : %.cpp FORCE
    $(CXX) -c $(CXXFLAGS) $< -o $@
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...