часть моего Makefile:Makefile: нужно сделать цель, прежде чем включать еще один Makefile
CPUDEPS=./mydeps.cpu
(...)
deps: $(CPUDEPS)
$(CPUDEPS): $(CCFILES)
@echo [DEPS] CPU
$(CMDECHO)makedepend -Y -s'# CPU sources dependencies generated with "make deps"' \
-w4096 -f- -- $(CFLAGS) -- $^ 2> /dev/null > $(CPUDEPS)
(...)
sinclude $(CPUDEPS)
Проблема 1: включает сделаны во время первой фазы обработки, цели во время второй фазы; поэтому, если ./mydeps.cpu не существует, и я «сделать DEPS», я получаю первый ошибка
Makefile:335: ./mydeps.cpu: No such file or directory
Я скрыть ошибку, используя sinclude
вместо include
, но проблема все еще существует: старый файл включен, а не только сгенерированный-один. Необходимо запустить его дважды, чтобы включить обновленный файл. Это потому, что make делает двухфазную обработку; есть ли способ сказать make завершить целевые отпечатки до синтаксический анализ включает?
Задача 2: даже если файл ./mydeps.cpu не существует и make deps
фактически создает его, я всегда получаю «делать: ничего, чтобы сделать для DEPS». Это не происходит с другими целями. Я не понимаю, почему и как его избежать.
Эта проблема «решает» 1 в случае обновления зависимостей, но возможно ли реализовать такой механизм для общих целей? (Я имею в виду: включая файл, который только что был создан). – Narcolessico
@EugenioR: прочитайте [Расширенное создание автозависимости] (http://mad-scientist.net/make/autodep.html) – bobbogo