GitLab YAML与Makefile中$VAR和$(VAR)的语法差异及疑问
问题解答
核心是Shell语法和Makefile语法的变量引用规则完全不同:
- GitLab流水线的脚本(包括你用的
echo命令)运行在Shell环境中,Shell引用环境变量的语法是$VAR或者${VAR},所以你用echo $VAR能正常输出值。 - Makefile里的
$(VAR)是Make工具专属的变量引用语法,Shell完全不识别这个写法——在Shell里,$(xxx)是命令替换语法,意思是执行xxx这个命令,把命令的输出结果替换到当前位置。所以你直接在Shell里敲echo $(VAR),Shell会尝试执行名为VAR的系统命令,自然找不到,就报出"VAR: Command not found"的错误。
- GitLab流水线的脚本(包括你用的
正确的测试方式:
- 要验证环境变量是否正确传递给Makefile,别直接用Shell的
echo,而是写一个简单的Makefile目标来测试,比如:
然后在GitLab流水线里执行test-var: echo $(VAR)make test-var,这时候Make会解析$(VAR),把它替换成环境变量的值,再调用Shell执行echo命令,就能正常输出了。
- 要验证环境变量是否正确传递给Makefile,别直接用Shell的
内容的提问来源于stack exchange,提问作者livsruss
相关产品推荐
相关产品推荐

