如何在保留换行符的同时将命令的输出分配给Makefile变量

时间:2019-03-03 05:24:22

标签: bash makefile

我想将命令的输出分配给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中。

非常感谢任何帮助。

1 个答案:

答案 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