Я пытаюсь написать задания, которые имеют много общего, как показано ниже.
EMACS_VERS := 22.1 23.4 24.5 25.3 26.1
LOCAL_LISPDIRS := $(patsubst %,local/%/site-lisp,$(EMACS_VERS))
$(addsuffix /leaf, $(LOCAL_LISPDIRS)): site-lisp/leaf
mkdir -p $(@D)
cp -rf site-lisp/$(@F) $@
$(MAKE) --no-print-directory -C $(dir $(@D)) .make-repo-$(@F)
$(addsuffix /orglyth, $(LOCAL_LISPDIRS)): site-lisp/orglyth
mkdir -p $(@D)
cp -rf site-lisp/$(@F) $@
$(MAKE) --no-print-directory -C $(dir $(@D)) .make-repo-$(@F)
$(addsuffix /cort, $(LOCAL_LISPDIRS)): site-lisp/cort
mkdir -p $(@D)
cp -rf site-lisp/$(@F) $@
$(MAKE) --no-print-directory -C $(dir $(@D)) .make-repo-$(@F)
Однако, когда эти задания были расширены с помощью макроса ниже, целевое имя не было привязано к автоматической переменной,и произошла ошибка.
define build_repo
$1: $2
mkdir -p $(@D)
cp -rf site-lisp/$(@F) $@
$(MAKE) --no-print-directory -C $(dir $(@D)) .make-repo-$(@F)
endef
$(eval $(call build_repo,$(addsuffix /leaf,$(LOCAL_LISPDIRS)),site-lisp/leaf))
$(eval $(call build_repo,$(addsuffix /orglyth,$(LOCAL_LISPDIRS)),site-lisp/orglyth))
$(eval $(call build_repo,$(addsuffix /cort,$(LOCAL_LISPDIRS)),site-lisp/cort))
Приведенный выше код получает следующую ошибку.Как мне кажется, это происходит потому, что имя цели не является автоматической привязкой переменной.
mkdir -p
usage: mkdir [-pv] [-m mode] directory ...
make: *** [Makefile:72: local/22.1/site-lisp/leaf.el] Error 64
Есть ли способ решить эту проблему?
С другой стороны, следующеекод был отклонен, так как изменения в листе, орглите, корте все генерируются, когда файлы изменений только в листе.
REPOS := leaf orglyth cort
REPODIRS := $(addprefix site-lisp/, $(REPOS))
LOCAL_REPOS := $(foreach repo, $(REPOS), $(addsuffix /$(repo), $(LOCAL_LISPDIRS)))
$(LOCAL_REPOS): $(REPODIRS)
mkdir -p $(@D)
cp -rf site-lisp/$(@F) $@
$(MAKE) --no-print-directory -C $(dir $(@D)) .make-repo-$(@F)
Дерево каталогов:
local
├── 22.1
│ └── site-lisp
│ ├── cort
│ ├── leaf
│ └── orglyth
├── 23.4
│ └── site-lisp
│ ├── cort
│ ├── leaf
│ └── orglyth
├── 24.5
│ └── site-lisp
│ ├── cort
│ ├── leaf
│ └── orglyth
├── 25.3
│ └── site-lisp
│ ├── cort
│ ├── leaf
│ └── orglyth
└── 26.1
└── site-lisp
├── cort
├── leaf
└── orglyth
site-lisp
├── cort
├── leaf
└── orglyth