THIS_MAKE := $(word $(words $(MAKEFILE_LIST)), $(MAKEFILE_LIST))
MAKER := $(MAKE) -f $(THIS_MAKE)
FILE_LIST=tmp/file tmp/dir/file
all:
rm -rf tmp
$(MAKER) copy_files
copy_files: $(FILE_LIST)
tmp/file: | tmp
echo hello>$@
tmp/dir/file: | tmp/dir
echo world>$@
define dst_dir_rule
$(1):
-mkdir -p $$@
endef
$(foreach dir,$(dir $(FILE_LIST)), $(eval $(call dst_dir_rule,$(dir))))
#end of makefile
Приведенный выше make-файл должен создавать файлы в переменной FILE_LIST.
Проблема в части, которая пытается автоматически сгенерировать правила для каталогов.
Когда я запускаю его, я получаю «пропавший разделитель». ошибка.
Когда я удаляю пробел между запятой и $ (eval), это работает.
Мне бы очень хотелось понять, почему.
Спасибо
Гур