Makefile с неограниченным набором целевых файлов - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть конвейер, который выглядит следующим образом:

json files
   image files
   audio files
       video files

Набор исходных json файлов является гибким, то есть файлы можно добавлять, редактировать или удалять.

Как настроить make-файл, который будет автоматически создавать / обновлять / удалять видеофайл, когда я добавляю / редактирую / удаляю соответствующий json файл?

Это примерный make-файл, который я получил до сих пор

all: $(subst data,audio,$(subst .json,.mp3,$(wildcard target/*/data/*.json)))

%.mp3: %.json
    ./scripts/audio --json $<

К сожалению, %.mp3 не соответствует ни одному из предварительных условий all:

make: *** No rule to make target `target/main/audio/hello.mp3', needed by `all'.  Stop.

1 Ответ

1 голос
/ 09 апреля 2020

(Я буду придерживаться этого абстрактного и высокоуровневого уровня, поскольку вы предоставили немного деталей и не указали make-файл.)

Создание и обновление видеофайлов - это просто, это такая работа, которую разработал Make для:

JSON_FILES := $(wildcard *.json)
VIDEO_TARGS := $(patsubst %.json,%.video,$(JSON_FILES))

%.video: %.json
    commands to use $< to build $@

Удаление устаревших видеофайлов более неудобно. Есть несколько способов сделать это; это может быть самым простым:

EXTANT_VID := $(wildcard *.video)
OBSOLETE := $(filter-out $(VIDEO_TARGS),$(EXTANT_VID))

purge:
    rm -f $(OBSOLETE)
...