[英]Makefile seems to take both inputs instead of one at a time
我有兩個文件1.gv
和2.gv
是 Graphviz 文件。
我寫了這個 Makefile 從我能想到的:
DOT=dot
FORMAT=svg
SRC=$(wildcard *.gv)
OUT=$(subst .gv,.$(FORMAT),$(SRC))
all: $(OUT)
$(OUT): $(SRC)
$(DOT) -T$(FORMAT) $^ -o $@
.PHONY: clean
clean:
rm -f $(OUT)
清潔似乎有效,唯一的問題似乎是它運行:
dot -Tsvg 1.gv 2.gv -o 1.svg
dot -Tsvg 1.gv 2.gv -o 2.svg
代替:
dot -Tsvg 1.gv -o 1.svg
dot -Tsvg 2.gv -o 2.svg
在您的 Makefile 中,make 發現它需要所有 gv 文件(SRC)來制作一個文件:1.gv(OUT),因此在循環中,先決條件會更改$<而不是目標$@ 。
您需要匹配一個模式並使用patsubst
而不是subst
所以 OUT 是一個文件模式。
為了清楚起見,我刪除了大多數變量。 隨時將它們添加回來。
SRC = $(wildcard *.gv)
OUT = $(patsubst %.gv,%.svg,$(SRC))
%.svg: %.gv
dot -Tsvg $< -o $@
all: $(OUT)
.PHONY: clean
clean:
$(RM) *.svg
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.