从 make 中的变量运行命令

Jef*_*tin 0 windows makefile

我正在为 Windows 运行 make。( choco install make)

在我尝试构建 docker 容器(特别是部署在 Amazon ECS 上)之前,几乎一切都运行良好......

ECS 部署过程的一部分是您从 AWS 获得登录名, aws ecr get-login 这将返回一个包含命令的字符串,看起来像 docker login -u AWS -p AQEC...HGZSSUMX4ftIpo8gY2 -e none https://123456789.dkr.ecr.us-east-1.amazonaws.com

如果我只是从 shell 运行它,我会复制输出并将其传递到命令行并运行 - 但我试图将它放入我的 makefile 中,所以我有 @ECS_LOGIN =$(shell aws ecr get-login)

然后我试图在下一行执行它 $(ECS_LOGIN)

这就是我得到的地方
process_begin: CreateProcess(NULL, ECS_LOGIN =docker login -u AWS -p AQEC...HGZSSUMX4ftIpo8gY2 -e none https://123456789.dkr.ecr.us-east-1.amazonaws.com, ...) failed. make (e=2): The system cannot find the file specified. make: *** [docker-deploy] Error 2

通过研究其他问题,这似乎是从 windows Makefile运行时出现路径问题 错误 make (e=2): The system cannot find the file specified

但是在我aws ecr get-login工作之前的 docker 命令很好,即
docker build
所以它似乎特定于从变量中运行命令

那么如何从 make 运行此命令并解析路径?

完整的食谱
docker-deploy: docker-build @ECS_LOGIN =$(shell aws ecr get-login) $(ECS_LOGIN) docker tag mytag:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/mytag:latest docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/mytag:latest

Mic*_*hin 5

首先,您需要决定要使用哪个工具来运行“aws ecr get-login”命令。在您的配方中,Make 运行它(并且您将结果分配给一个 shell 变量而不引用多字值,但我猜 Windows shell 可以接受它?)。在下一行中,您尝试引用shell变量,但忘记用美元引用美元符号,因此 make 替换调用配方时 ECS_LOGIN 的值(可能什么都没有)。

也许首先将第一行 ( ECS_LOGIN=$(shell aws ecr get-login)) 移出 shell 配方,看看是否有帮助:

ECS_LOGIN =$(shell aws ecr get-login)
docker-deploy: docker-build
    @$(ECS_LOGIN)
    docker tag mytag:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/mytag:latest
    docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/mytag:latest
Run Code Online (Sandbox Code Playgroud)