У меня проблемы с GNU make 3.81, не удаляющей промежуточные файлы.Проблема похожа на GNU make Не удаляет промежуточные файлы , но этот ответ не решает мою проблему.Я разобрал проблему в этом тестовом примере:
default:
@echo no $@ target; exit 1
oncetwice: once twice
@echo $@: $^
## Uncommenting the following line is sufficient to cause GNU make 3.81 to
## not delete the intermediate 'twice.dep', even if it didn't exist
## previously (i.e., was created by this invocation).
#another: twice.dep
%: %.dep
@echo $^ >$@
## the following .INTERMEDIATE has no effect re: the twice: twice.dep
## dependency
.INTERMEDIATE: %.dep
%.dep:
@echo $@ >$@
NB командные блоки должны быть с отступом табуляции.
То есть цель once
зависит от once.dep
и twice
зависит от twice.dep
.Кроме того, another
также зависит от twice.dep
.Именно эта строка никогда не удаляет twice.dep
, даже если make ее создал и несмотря на строку .INTERMEDIATE.
Созданный Makefile дает:
snafu$ rm -f once* twice*; make oncetwice
oncetwice: once twice
rm once.dep twice.dep
Раскомментирование twice: twice.dep
строка:
snafu$ rm -f once* twice*; make oncetwice
oncetwice: once twice
rm once.dep
Обратите внимание, что дважды.dep не является rm'd во втором вызове.
со страниц информации:
.INTERMEDIATE
The targets which .INTERMEDIATE depends on are treated as intermediate files.
[...]
Intermediate files are remade using their rules just like all other
files. But intermediate files are treated differently in two ways.
The first difference [...]
**The second difference is that if make does create b in order to update
something else, it deletes b later on after it is no longer
needed. Therefore, an intermediate file which did not exist before make
also does not exist after make.**
I 'мы пытались сделать another: twice.dep
настоящим правилом с помощью командного блока.Я также пробовал варианты указания .INTERMEDIATE в качестве шаблона, буквального имени файла и того и другого.Я также пытался использовать .PHONY.make-3.82 NEWS, похоже, не содержит соответствующих исправлений.Поведение, которое я наблюдаю, больше похоже на описанное для .SECONDARY целей.
Спасибо,
Reece