首页 > 解决方案 > 使用这个 Makefile 变量我做错了什么?

问题描述

我有一个 Makefile 用于构建和标记 docker 映像。我想用从文件(“pyproject.toml”)中提取的名称和版本信息来标记构建的图像。我的提取机制非常简单,在命令行上手动运行时可以工作:

$ grep -e "^name\s*=\s*" pyproject.toml | cut -d = -f 2 | xargs
audio_program_generator
$ grep -e "^version\s*=\s*" pyproject.toml | cut -d = -f 2 | xargs
1.7.1.0

但是,当我尝试在 Makefile 中使用变量时,它们会扩展为空。

我的 pyproject.toml 文件如下所示:

[tool.poetry]
name = "audio_program_generator"
version = "1.7.1.0"

Makefile 的相关部分:

NAME:=$(grep -e "^name\s*=\s*" pyproject.toml | cut -d = -f 2 | xargs)
VERSION:=$(grep -e "^version\s*=\s*" pyproject.toml | cut -d = -f 2 | xargs)

build-apg:
    docker build --target apg --tag $(NAME):$(VERSION) .

预期产出

$ make build-apg
docker build --target apg --tag audio_program_generator:1.7.1.0 .

实际输出:

$ make build-apg
docker build --target apg --tag : .
invalid argument ":" for "-t, --tag" flag: invalid reference format
See 'docker build --help'.
make: *** [build-apg] Error 125

我究竟做错了什么?

标签: dockermakefilepyproject.toml

解决方案


推荐阅读