Навязать заказ на заказ только для предпосылок цели - PullRequest
0 голосов
/ 28 августа 2018

У меня есть фрагмент makefile:

all: $(objects) 
fresh: all | clean directory
directory: ;mkdir -p OutputDirectory
clean: ;rm $(objects); rm -rf OutputDirectory

Здесь я хочу убедиться, что, когда я делаю make fresh - clean, следует directory, за которым следует all.

Семантически, здесь clean может не иметь смысла быть предварительным условием заказа. Предположим, что это какой-то order only dependency, который должен быть выполнен в некотором порядке.


Следующая ссылка показывает похожую проблему, но для обычных зависимостей: makefile - наложить порядок на предпосылки цели - Stack Overflow

1 Ответ

0 голосов
/ 28 августа 2018

В рецепте fresh вы можете вызвать make дважды рекурсивно для одного и того же файла Makefile для цели, которая создает каталог, и цели all соответственно:

# At the very beginning of the makefile
CURRENT_MAKEFILE :=  $(lastword $(MAKEFILE_LIST))
# ...

.PHONY: all clean fresh

directory := OutputDirectory

all: $(objects) 
fresh: clean
    $(MAKE) -f $(CURRENT_MAKEFILE) $(directory)
    $(MAKE) -f $(CURRENT_MAKEFILE) all

$(directory): ;mkdir -p $@
clean: ;rm -f $(objects); rm -rf $(directory)

Таким образом, цели all предшествует цель $(directory), которой в свою очередь предшествует clean.

...