Obiettivi con caratteri jolly in un Makefile

Come posso compattare i seguenti obiettivi 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 

Usare GNU Make 3.81 .

Il concetto è chiamato regole del modello . Puoi leggere a riguardo in GNU make manual .

 $(GRAPHDIR)/%.png: $(GRAPHDIR)/%.dot dot $< -Tpng -o [email protected] graphs: $(patsubst %,$(GRAPHDIR)/%.png, Complex Simple IFileReader McCabe)\ 

o semplicemente

 %.png: %.dot dot $< -Tpng -o [email protected] graphs: $(patsubst %,$(GRAPHDIR)/%.png, Complex Simple IFileReader McCabe) 

Roba avanzata: è divertente notare che c'è una ripetizione lassù ...

 PNG_pattern=$(GRAPHDIR)/%.png $(PNG_pattern): $(GRAPHDIR)/%.dot dot $< -Tpng -o [email protected] graphs: $(patsubst %,$(PNG_pattern), Complex Simple IFileReader McCabe) 

Nel caso in cui si desideri effettivamente generare un file .PNG per ogni .DOT all’interno della directory corrente:

 %.png : %.dot dot -Tpng -o [email protected] $< all: $(addsuffix .png, $(basename $(wildcard *.dot))) 

Mi sono inventato questo Makefile dopo aver letto la risposta di @Pavel.

Penso che tu voglia alcune regole del modello. Prova questo.

 TARGETS = $(GRAPHDIR)/Complex.png \ $(GRAPHDIR)/Simple.png \ $(GRAPHDIR)/IFileReader.png \ $(GRAPHDIR)/McCabe-linear.png %.png : %.dot dot $^ -Tpng -o [email protected] graphs: $(TARGETS)