Makefile: найти и заменить текст в .txt файле - PullRequest
0 голосов
/ 08 апреля 2020
objects = foo.txt bar.txt

all: $(objects)

$(objects): %.txt: %.txt
        sed -e '/foo/bar' < $< > out_dir/$@

Я получаю ошибку сброса круговой зависимости. Очевидно, что если я изменю расширение на

objects = foo.txt2 bar.txt2

all: $(objects)

$(objects): %.txt2: %.txt
sed -e '/foo/bar' < $< > out_dir/$@

, то оно будет работать

1 Ответ

0 голосов
/ 08 апреля 2020

Одним из возможных решений было бы определить ваши источники и создать список объектов с именами, включая часть каталога из этого.

Пример:

SRC = foo.txt bar.txt
OBJS = $(SRC:%.txt=out_dir/%.txt)

all: $(OBJS)

out_dir/%.txt: %.txt
        sed -e 's/foo/bar/g' < $< > $@

Это изменится с foo на bar в foo.txt и bar.txt и поместите результат в файлы в out_dir с теми же базовыми именами, что и у исходных файлов.

Основное отличие состоит в том, что цель не зависит от самого себя (круговая зависимость), поэтому цель out_dir/foo.txt зависит от foo.txt, а out_dir/bar.txt зависит от bar.txt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...