Rob*_*anu 49 makefile gnu-make
如何压缩以下Makefile目标?
$(GRAPHDIR)/Complex.png: $(GRAPHDIR)/Complex.dot
dot $(GRAPHDIR)/Complex.dot -Tpng -o $(GRAPHDIR)/Complex.png
$(GRAPHDIR)/Simple.png: $(GRAPHDIR)/Simple.dot
dot $(GRAPHDIR)/Simple.dot -Tpng -o $(GRAPHDIR)/Simple.png
$(GRAPHDIR)/IFileReader.png: $(GRAPHDIR)/IFileReader.dot
dot $(GRAPHDIR)/IFileReader.dot -Tpng -o $(GRAPHDIR)/IFileReader.png
$(GRAPHDIR)/McCabe-linear.png: $(GRAPHDIR)/McCabe-linear.dot
dot $(GRAPHDIR)/McCabe-linear.dot -Tpng -o $(GRAPHDIR)/McCabe-linear.png
graphs: $(GRAPHDIR)/Complex.png $(GRAPHDIR)/Simple.png $(GRAPHDIR)/IFileReader.png $(GRAPHDIR)/McCabe-linear.png
Run Code Online (Sandbox Code Playgroud)
-
用GNU Make 3.81.
P S*_*ved 53
这个概念称为模式规则.您可以在GNU make手册中阅读它.
$(GRAPHDIR)/%.png: $(GRAPHDIR)/%.dot
dot $< -Tpng -o $@
graphs: $(patsubst %,$(GRAPHDIR)/%.png, Complex Simple IFileReader McCabe)\
Run Code Online (Sandbox Code Playgroud)
要不就
%.png: %.dot
dot $< -Tpng -o $@
graphs: $(patsubst %,$(GRAPHDIR)/%.png, Complex Simple IFileReader McCabe)
Run Code Online (Sandbox Code Playgroud)
先进的东西:很有趣的是注意到那里有重复......
PNG_pattern=$(GRAPHDIR)/%.png
$(PNG_pattern): $(GRAPHDIR)/%.dot
dot $< -Tpng -o $@
graphs: $(patsubst %,$(PNG_pattern), Complex Simple IFileReader McCabe)
Run Code Online (Sandbox Code Playgroud)
Met*_*hox 21
以防万一你真的想为当前目录中的每个.DOT生成一个.PNG:
%.png : %.dot
dot -Tpng -o $@ $<
all: $(addsuffix .png, $(basename $(wildcard *.dot)))
Run Code Online (Sandbox Code Playgroud)
在阅读@Pavel的答案后,我想出了这个Makefile.
我想你想要一些模式规则.试试吧.
TARGETS = $(GRAPHDIR)/Complex.png \
$(GRAPHDIR)/Simple.png \
$(GRAPHDIR)/IFileReader.png \
$(GRAPHDIR)/McCabe-linear.png
%.png : %.dot
dot $^ -Tpng -o $@
graphs: $(TARGETS)
Run Code Online (Sandbox Code Playgroud)