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.
Проблема заключается в той части, которая пытается автоматически генерировать правила для каталогов.
Когда я запускаю его, я получаю "отсутствующий разделитель". error.
Когда я удаляю пробел между запятой и $(eval), все работает.
Очень хотелось бы понять почему.
Спасибо,
Гур
-mkdir -p $$@
в функцииdst_dir_rule
, у меня не было проблем с запуском этого файла make. Я использую GNU make версии 3.81 (поставляется с Ubuntu 12.04). - person FooF   schedule 16.10.2012