Makefile,转换文件名以折叠文件树结构

问题描述 投票:0回答:1

给出以下目录结构

.
├── 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

我从正常的事物开始:

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|'的操作

makefile
1个回答
0
投票

Make的通配符处理不符合此要求。使用shell调用sed:

TOPIC_DEPLOYS := $(shell find . -path '*/topic/*.yaml' | sed 's|./\(.*\)/\(.*\)/\(.*\).yaml|\2/\1-\3.done|')
© www.soinside.com 2019 - 2024. All rights reserved.