簡體   English   中英

Makefile 似乎同時接受兩個輸入而不是一次輸入

[英]Makefile seems to take both inputs instead of one at a time

我有兩個文件1.gv2.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM