Makefile с sed throwing *** целевой шаблон не содержит «%». Стоп - PullRequest
1 голос
/ 13 апреля 2020

У меня есть Makefile, в котором мне нужно передать имя изображения другому сценарию, но проблема заключается в том, что Image Name имеет: и - в своей строке, например: image.name-v1: latest. Согласно Google сделать файл, имеющий: в переменной вызывает проблему. Как решить эту проблему в Makefile. Ниже приведен пример кода, который я пробую, в котором IMAGE имеет image.name-v1: последний

IMAGE2 ?= ''
.PHONY: image
image:
    IMAGE2 := $(subst :,\:,$(IMAGE_R)) ## IMAGE_R is a run time variable for make target
    rr/image.sh $(IMAGE2)

Ошибка:

IMAGE2 := docker-rs\:latest ## Test Image using Image Reference
/bin/sh: 1: IMAGE2: not found
Makefile:75: recipe for target 'image' failed
make: *** [image] Error 127

ОБОЛОЧКА СКРИПТ: изображение. sh

#!/bin/bash
set -ex
IMAGE="$1"
echo "Image:  $IMAGE"

1 Ответ

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

Вы можете попробовать экранировать двоеточие следующим образом:

# Mock IMAGE with colon in name
IMAGE := test:123
# Create new variable adding an escapeing slash
IMAGE2 := $(subst :,\:,$(IMAGE))

# Use IMAGE2 from here on
$(info IMAGE $(IMAGE))
$(info IMAGE2 $(IMAGE2))

.PHONY: xyz-pp
xyz-pp: $(IMAGE2)

.PHONY: $(IMAGE2)
$(IMAGE2):
    @echo "1234" > $(IMAGE2)
    @ls
    @rr/image.sh $(IMAGE2)

Я добавил скрипт в подпапку rr:

echo "------------- SCRIPT ----------"
echo PARAM: $1
echo $(find -name "$1")
echo "------------- SCRIPT ----------"

Вывод:

> make
IMAGE test:123
IMAGE2 test\:123
makefile  rr  test:123
------------- SCRIPT ----------
PARAM: test:123
./test:123
------------- SCRIPT ----------

Так что здесь я просто заменяю ":" на ":" в переменной IMAGE2 и затем использую это.

Примечание: Я проверил это просто echo ' введите вашу команду (поскольку у меня нет этого файла) и нажмите IMAGE2, чтобы создать файл

...