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
Das obige Makefile sollte die Dateien in der Variablen FILE_LIST erstellen.
Das Problem ist mit dem Teil, der versucht, Regeln für die Verzeichnisse automatisch zu generieren.
Wenn ich es ausführe, bekomme ich einen "fehlenden Separator". Error.
Wenn ich den Abstand zwischen dem Komma und dem $ (eval) löschen, funktioniert es.fehlender Separatorfehler in einem Makefile, wenn zusätzlicher Platz innerhalb von foreach hinzugefügt wird
Ich würde wirklich gerne verstehen, warum.
Danke,
Gur
Nach dem Raum vor Ersetzen von die make recipe Zeilen mit Tab (welche Anomalie ich vermute, kommt von copy & paste) einschließlich vor '-mkdir -p $$ @' in der 'dst_dir_rule' Funktion auf, ich hatte kein Problem, diese make-Datei auszuführen. Ich benutze GNU make Version 3.81 (wie mit Ubuntu 12.04 ausgeliefert). – FooF