我有一个Makefile用于构建Docker容器。我正在检测当前的git分支,然后使用它作为构建的标记,但是一些git分支可能包含斜杠,这是Docker标记无效的字符。评估后Makefile变量中的替换字符
我试图在Makefile中用“ - ”替换斜线,但是我需要首先检测到git分支。这里是什么,我有一个非常简化的版本:
NAME = foo
BRANCH = `git rev-parse --abbrev-ref HEAD`
TAG = $(subst /,-,$(BRANCH))
build:
docker build --tag=$(NAME):$(TAG) .
的问题是,如果BRANCH
最终被设置为“富/栏”检测git的分支后,再TAG
也最终被“富/酒吧” 。但是,如果我明确将BRANCH
设置为“foo/bar”(而不是检测它),则TAG
会正确设置为“foo-bar”,这是一个有效的标记。
我是Makefiles的新手,但我的猜测是shell命令的评估太晚了,subst
命令试图替换shell命令本身,而不是命令的结果。
我使用也尝试了“:=”立即评估(如果我理解正确的文档):
BRANCH := `git rev-parse --abbrev-ref HEAD`
无济于事。
有没有更好的方法来做我正在尝试的,或者我坚持不得不手动传递分支名称到make
命令?
我认为这个问题的'git'和'docker'标签是不相关的,因为它纯粹是'make'和'shell'相关的。你介意放弃他们吗? – ivant
我添加了这些标签,以防某人做类似的事情已经解决了这个问题。但是,当然,我会删除它们,我想它一定会让你的列表混乱。 – JoeLinux