Makefile, преобразующий имена файлов, чтобы свернуть структуру файлового дерева - PullRequest
0 голосов
/ 27 января 2020

Учитывая следующую структуру каталогов

.
├── Makefile
├── test.test.io
│   └── topic
│       └── foo.yaml
└── foo.bar.us
    ├── topic
    │   └── foo.yaml
    │   └── bar.yaml
    └── other
        └── baz.yaml

Я хочу произвести:

.
├── build
│   └── topic
│   │   └── test.test.io-foo.done
│   │   └── foo.bar.us-foo.done
│   │   └── foo.bar.us-bar.done
│   └── other
│       └── foo.bar.us-foo.done

Я начал с чего-то нормального sh вроде:

TOPIC_SOURCES := $(shell find . -path '*/topic/*.yaml')
TOPIC_DEPLOYS := $(TOPIC_SOURCES:%.yaml=build/%.done)

build/%.done: %.yaml
    @echo %< %@

Но я как бы напрягаю голову, пытаясь понять, как использовать данные инструменты для выполнения остальной части преобразования, поскольку мне нужно выполнить что-то похожее на sed -E 's|^./(.*)/topic/(.*).yaml|\1-\2.done|'

1 Ответ

0 голосов
/ 28 января 2020

Обработка подстановочных знаков в Make не подходит для этого. Используйте shell для вызова sed:

TOPIC_DEPLOYS := $(shell find . -path '*/topic/*.yaml' | sed 's|./\(.*\)/\(.*\)/\(.*\).yaml|\2/\1-\3.done|')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...