Существует ряд проблем с вашим make-файлом.Однако, основываясь на ваших комментариях, я склонен предположить, что MCVE здесь просто немного слишком"M", и он настолько уменьшен, что у него есть ряд основных проблем.Поэтому я не буду их обсуждать, если только вы не захотите, чтобы я.
Проблема в том, что вы создаете важные файлы, не указывая, что это именно то, что вы делаете.Make изнутри хранит кэш содержимого каталогов, с которыми он работал, из соображений производительности, и этот кэш обновляется только тогда, когда make вызывает правило, которое, как он понимает, изменит его.
Здесь ваша цель prepare
но рецепт фактически создает совершенно другой файл, test.dat
.Таким образом, make не изменяет свой внутренний кэш содержимого каталога, и когда он проверяет кэш, чтобы увидеть, существует ли файл test.dat
, он не существует.
Вы должны быть уверены, что ваш make-файл являетсянаписано так, что это не обманывает make: если рецепт создает файл foo
, тогда целевое имя должно быть foo
, а не bar
.