Сделайте команды выполнения в контексте папки несколько раз - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть makefile, который под proj root dir.

Папка proj является основной папкой и есть папки, такие как ws-led или tools-ext et c под ним, который содержит docker файлов. Кроме того, есть также Makefile, который находится под root, который должен выполнять все команды.

Это структура папок

proj
 - ws-led
  — Dockerfile
 - tools-ext
  — Dockerfile    
- Makefile

Что мне нужно, чтобы cd к каждой из папок под гнилью (у нас их много) и запустите:

docker build <folder name> .

Пример: (точно так же, как при запуске следующей команды вручную )

cd ws-led
docker build -t ws-led .

cd tools-ext
docker build -t tools-ext .

Я пытаюсь сделать следующее (возможно, вместо параметра репо я запускаю все папки на одном уровне Makefile)

Like (CURDIR)…

all: pre docker-build
.PHONY: pre docker-build

repos := ws-led tools-ext

pre:
    $(patsubst %,docker-build,$(repos))

docker-build:pre
    cd $*; docker build -t $* . >&2 | tee docker-build

при использовании этого я получаю сообщение об ошибке:

invalid argument "." for "-t, --tag" flag: invalid reference format

Есть идеи, что здесь не так? или я мог бы сделать это лучше?

Поскольку у меня много репозиториев / папок, я хочу использовать make для обработки

1 Ответ

1 голос
/ 13 февраля 2020

Существует более одного способа сделать это.

Вы можете использовать bash для l oop:

docker-build:
    for dir in $(repos); do cd $$dir; docker build -t $$dir . >&2 | tee docker-build; done

Или использовать правило шаблона (или в этом случае шаблонное правило c):

REPO_BUILDS := $(addsuffix -build, $(repos))

docker-build: $(REPO_BUILDS)

.PHONY: $(REPO_BUILDS)
$(REPO_BUILDS): %-build:
    cd $*; docker build -t $* . >&2 | tee docker-build
...