我想将命令的输出分配给Makefile变量,但约束是我需要保留换行符。
该值是私钥,因此以下代码将导致格式错误的密钥:
SHELL=/bin/bash
APP_NAME?=foo
ifdef CI
export DEPS_PRIVATE_KEY=$(shell echo $(CI_BASE64_PRIVATE_KEY) | base64 -d)
endif
build:
@docker build --no-cache --build-arg DEPS_PRIVATE_KEY -t $(APP_NAME) .
.PHONY: build
我意识到我可以在bash中设置值,然后像这样调用make build
:
DEPS_PRIVATE_KEY="$(echo $CI_BASE64_PRIVATE_KEY | base64 -d)" make build
但是我想知道是否可以将这种逻辑封装在Makefile
中。
非常感谢任何帮助。
答案 0 :(得分:1)
使用make变量作为shell环境变量的中间变量-尤其是当值是多行字符串时-可能是无用的复杂。因此,最简单的方法可能是将环境变量定义添加到您的配方中:
$ cat Makefile
build:
@export TXT="$$(echo "$$(B64)" | base64 -d)"; \
printenv TXT
$ make B64="$(printf 'a\nb\n' | base64)"
export TXT="$(echo "YQpiCg==" | base64 -d)"; \
printenv TXT
a
b