Подстановочные цели в Makefile

Как я могу скомпоновать следующие цели 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 

Использование GNU Make 3.81 .

Концепция называется шаблоном . Вы можете прочитать об этом в GNU make manual .

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

или просто

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

Продвинутый материал: забавно заметить, что там есть повторение ...

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

На всякий случай вы действительно хотите создать .PNG для каждого .DOT в текущем каталоге:

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

Я придумал этот Makefile после прочтения ответа от @Pavel.

Я думаю, вам нужны некоторые шаблонные правила. Попробуйте это.

 TARGETS = $(GRAPHDIR)/Complex.png \ $(GRAPHDIR)/Simple.png \ $(GRAPHDIR)/IFileReader.png \ $(GRAPHDIR)/McCabe-linear.png %.png : %.dot dot $^ -Tpng -o [email protected] graphs: $(TARGETS) 
  • Источники из подкаталогов в Makefile
  • Создание каталогов с использованием файла make
  • Какова цель .PHONY в make-файле?
  • Создание C-программы «из исходного дерева» с помощью GNU make
  • crti.o отсутствует файл
  • gcc makefile error: «Нет правила для создания цели ...»
  • GCC с Visual Studio?
  • «Множественные целевые шаблоны» Ошибка Makefile
  • Ошибка: отсутствует разделитель
  • Как приложение «make» знает цель по умолчанию для сборки, если не указана цель?
  • / usr / bin / ld: не удается найти -lc при компиляции с make-файлом
  • Давайте будем гением компьютера.