将makefile中的env var作为可选项传递

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将makefile中的env var作为可选项传递相关的知识,希望对你有一定的参考价值。

我在执行bash脚本的makefile中有一个命令:

test:
 ./script.sh

该脚本已实现getopts,因此可以像这样调用它:

./script.sh -n 10

什么可以通过以下方式完成bash:

./script.sh ${n:+ -n "${n}"}

但是当我把这个结构放到makefile时它产生空字符串。

test:
 ./script.sh  ${n:+ -n "${n}"}

我不能简单地使用./scipt.sh $(n),因为我需要-n前缀。

谢谢你的任何建议。

答案

$在makefile中有特殊含义,因为it is used for make variable references

你的食谱命令中的${n:+ -n "${n}"}部分正在被make(而不是bash)扩展,这导致一个空字符串,这就是bash收到的:

./script.sh  

然而,您可以通过在其前面添加$来逃避$

test:
 ./script.sh  $${n:+ -n "$${n}"} 

这样,bash将收到以下命令来执行:

./script.sh  ${n:+ -n "${n}"} 

以上是关于将makefile中的env var作为可选项传递的主要内容,如果未能解决你的问题,请参考以下文章

如何确保将 Makefile 变量设置为先决条件?

GCP kms加密env var并通过cloudbuild.yaml将加密密钥传递给谷歌应用引擎

将数组值分配给 .env 文件上的 ENV var

Makefile中的宏定义必须采用 和 么

eval_tidy 中的错误(pair$lhs,env = default_env):找不到对象“Var1”

Makefile将变量传递给bash脚本