具有sed抛出***目标模式的Makefile不包含'%'。停止

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

我有一个Makefile,我需要在其中将图像名称传递给另一个脚本,但是问题是,图像名称在其行中具有例如:image.name-v1:latest。按照谷歌make文件在变量中有:会导致问题。如何在Makefile中解决此问题。以下是我尝试在其中IMAGE具有image.name-v1:latest

的示例代码
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

SHELL SCRIPT:image.sh

#!/bin/bash
set -ex
IMAGE="$1"
echo "Image:  $IMAGE"
shell sed makefile gnu-make
1个回答
0
投票

您可以尝试像这样逃避冒号:

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

    # Use IMAGE2 from here on
    .PHONY: xyz-pp
    xyz-pp: $(IMAGE2)

    .PHONY: $(IMAGE2)
    $(IMAGE2):
        @echo rr/image.sh $(IMAGE2)
        touch $(IMAGE2)

所以在这里,我只是将“:”替换为“:”到变量IMAGE2中,然后使用它。

[注:我通过回显您的命令(因为我没有该文件)并触摸'IMAGE2以创建文件”来进行了测试

© www.soinside.com 2019 - 2024. All rights reserved.