Подстановочные цели в 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
.
- Передача дополнительных переменных из командной строки для
- Могу ли я скомпилировать все .cpp-файлы в src / to .o в obj /, затем ссылку на двоичный файл ./?
- Что означают символы makefile $ @ и $ <mean?
- Makefile ifeq логический или
- Что означает @: (в символе двоеточие) в Makefile?
- Makefile (Генерация автозависимости)
- Makefile для размещения объектных файлов из исходных файлов разных каталогов в один отдельный каталог?
- Как разместить объектные файлы в отдельном подкаталоге
- Файл Makefile с несколькими исполняемыми файлами
- Общий путь каталога файлов GNU
- Как сделать SIMPLE C ++ Makefile?
- Как написать команду 'cd' в make-файле?
- Разница между CPPFLAGS и CXXFLAGS в GNU Make
Концепция называется шаблоном . Вы можете прочитать об этом в 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)