一、Makefile中引用shell中的变量
test.sh
#!/bin/bash
set -e
export DIR=/home/yuyin.wei
make print
Makefile
print:
echo $(DIR)
执行test.sh,结果如下:
echo /home/yuyin.wei
/home/yuyin.wei
如果此时Makefile中使用echo $$(DIR),反而会出错,如下:
echo $(DIR)
/bin/sh: DIR: command not found
那Makefile中引用shell变量的时候,什么时候使用 $$?
当shell变量是在同一个命令行中的时候,如下:
SUBDIRS=tools examples src
target:
for dir in $(SUBDIRS); do $(MAKE) -C $$dir;done
此时dir是同一个命令行中,刚定义的一个变量,所以引用的时候要用$$
又比如:
VAR=3
target:
echo $(VAR);\
VAR=4;\
echo $(VAR);\
echo $$VAR
第1行,输出为3
第2行,定义了一个shell变量
第3行,输出的是Makefile开头定义的VAR变量,仍然是3
第4行,输出的是第2行定义的shell变量,输出的是4
所以这里有两个VAR变量,第2行定义的VAR变量也是同一个命令行中定义的,所以需要用$$进行引用
本文详细探讨了在Makefile中如何正确引用shell变量,特别是在多行命令和不同作用域中使用$$的场景。通过示例解释了当shell变量在同一命令行内时需要使用$$来避免混淆,并解释了Makefile与shell脚本中变量引用的差异。
2703

被折叠的 条评论
为什么被折叠?



