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>[email protected]
tmp/dir/file: | tmp/dir
echo world>[email protected]
define dst_dir_rule
$(1):
-mkdir -p [email protected]
endef
$(foreach dir,$(dir $(FILE_LIST)), $(eval $(call dst_dir_rule,$(dir))))
#end of makefile
Файл makefile должен создавать файлы в переменной FILE_LIST.
Проблема с частью, которая пытается автоматически генерировать правила для каталогов.
Когда я запускаю его, я получаю «отсутствующий разделитель». ошибка.
Когда я удаляю пробел между запятой и $ (eval), он работает.Отсутствует ошибка разделителя в файле makefile при добавлении дополнительного пространства внутри foreach
Я бы очень хотел понять, почему.
Спасибо,
Гур
После замены пространство перед make make recipe lines с вкладкой (какая аномалия, которую я предполагаю, происходит от копирования и вставки), в том числе перед '-mkdir -p $$ @' в функции 'dst_dir_rule' on, у меня не было проблем с запуском этого файла make. Я использую GNU make версии 3.81 (как поставляется с Ubuntu 12.04). – FooF