У вас есть эта строка в вашем make-файле:
_IGNORE := $(shell mkdir -p $($(_MODULE_NAME)_OUTPUT))
, которая создает выходной каталог во время синтаксического анализа make-файла.Затем вы запускаете свою цель clean
, которая вызывает этот рецепт:
rm -rf $($(patsubst clean-%,%,$@)_OUTPUT)
, что приводит к удалению выходного каталога.Затем вы запускаете цель all
, которая вызывает компилятор и просит его записать выходной файл в $($(_MODULE_NAME)_OUTPUT)/%.o
, но этот каталог больше не существует.
Таким образом, компилятор выдаст вам ошибку:
error: unable to open output file '...': No such file or directory
Если вы дважды запустите make
, то при первой очистке и удалении каталога, затем при запуске make all
он выполнит команду оболочки _IGNORE
и снова создаст каталог, чтобы он существовал.
Если вы запускаете make re
один раз, то make-файл анализируется только один раз, а выходной каталог создается только один раз (до его удаления).