У меня есть следующая архитектура проекта
/
├── makefile
└── doc/
├── makefile
└── uml/
├── uml1/
│ ├── uml1.plantuml
| └── res/
| ├── ressource1
| └── ressource2
└── uml2/
├── uml2.plantuml
└── res/
├── ressource1
└── ressource2
Моя цель - сгенерировать изображение png для каждого каталога, представленного в doc/uml
в build/doc/uml
Родительский make-файл следующийone
BUILD_PATH?=./build
doc:
${MAKE} -C $@ $@ ADOC_OUTPUT_DIR=$(abspath ${BUILD_PATH}/doc)
clean:
rm -rf build
.PHONY: doc clean
И следующий подмаки-файл
ADOC_OUTPUT_DIR ?= build
UML_OUTPUT_DIR = ${ADOC_OUTPUT_DIR}/uml
UML = $(notdir $(wildcard uml/*))
UML_TARGETS = $(foreach uml, ${UML}, ${UML_OUTPUT_DIR}/${uml}.png)
doc: uml
uml: ${UML_OUTPUT_DIR} ${UML_TARGETS}
${UML_TARGETS}: ${UML_OUTPUT_DIR}/%.png : uml/%/%.plantuml
plantuml $< -o $(@D)
###################################
##### Directory creation part #####
###################################
${UML_OUTPUT_DIR}:
mkdir -p $@
.PHONY: doc uml ${UML_TARGETS} ${UML_OUTPUT_DIR}
Однако он не работает, когда я запускаю его с make doc
$ make doc
make -C doc doc ADOC_OUTPUT_DIR=/home/julien/test_uml/build/doc
make[1] : Entering directory « /home/julien/test_uml/doc »
make[1]: *** No rule to make target « uml/gui_state_diagram/%.plantuml », needed by « /home/julien/test_uml/build/doc/uml/gui_state_diagram.png ». Stop.
make[1] : Exiting directory « /home/julien/test_uml/doc »
makefile:12 : the recipe for target « doc » failed
make: *** [doc] Erreur 2
Кажетсяпроблема заключается в том, что «%» нельзя заменить дважды на зависимости.
Я не могу найти способ достичь своей цели без изменения архитектуры проекта (я хотел бы оставить еетак близко, как сейчас)
Есть ли способ заменить шаблон '%' дважды?
Есть ли лучший способ достичь моей целичем пытаться заменить имя uml дважды в зависимости цели?