Comment puis-je compacter les cibles Makefile suivantes?
$(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
–
Utiliser GNU Make 3.81
.
Le concept est appelé règles de configuration . Vous pouvez lire à ce sujet dans GNU make manual .
$(GRAPHDIR)/%.png: $(GRAPHDIR)/%.dot dot $< -Tpng -o $@ graphs: $(patsubst %,$(GRAPHDIR)/%.png, Complex Simple IFileReader McCabe)\
ou juste
%.png: %.dot dot $< -Tpng -o $@ graphs: $(patsubst %,$(GRAPHDIR)/%.png, Complex Simple IFileReader McCabe)
Des trucs avancés: il est amusant de constater qu'il y a une répétition là-haut ...
PNG_pattern=$(GRAPHDIR)/%.png $(PNG_pattern): $(GRAPHDIR)/%.dot dot $< -Tpng -o $@ graphs: $(patsubst %,$(PNG_pattern), Complex Simple IFileReader McCabe)
Juste au cas où vous voulez réellement générer un .PNG pour chaque .DOT dans le répertoire courant:
%.png : %.dot dot -Tpng -o $@ $< all: $(addsuffix .png, $(basename $(wildcard *.dot)))
J'ai trouvé ce Makefile après avoir lu la réponse de @Pavel.
Je pense que vous voulez des règles de pattern. Essayez ceci.
TARGETS = $(GRAPHDIR)/Complex.png \ $(GRAPHDIR)/Simple.png \ $(GRAPHDIR)/IFileReader.png \ $(GRAPHDIR)/McCabe-linear.png %.png : %.dot dot $^ -Tpng -o $@ graphs: $(TARGETS)