下面Makefile本来想回显lib和data这两个目录名,但是却没有正确显示。
DIRS = lib data
linux:
for i in $(DIRS); do \
echo $i; \
done
原因:make在读到echo这句时,首先对$i进行变量代换,但由Makefile的上下文环境中没有发现i的定义,所以$i是空值。make在完成变量代换后再执行shell命令,也就是整个for语句,这个for语句在shell环境下执行,此时shell看到的是:
for i in lib data; do \
echo ; \
done
所以就没回显目录名。
应该把$i改成$$i这样make在Makefile上下文环境下的变量代换这步发现$$,是转义的$符号,于是$i不进行变量代换。在shell环境下执行for语句才把$i代入。这样才是想要的效果。
DIRS = lib data
linux:
for i in $(DIRS); do \
echo $i; \
done
原因:make在读到echo这句时,首先对$i进行变量代换,但由Makefile的上下文环境中没有发现i的定义,所以$i是空值。make在完成变量代换后再执行shell命令,也就是整个for语句,这个for语句在shell环境下执行,此时shell看到的是:
for i in lib data; do \
echo ; \
done
所以就没回显目录名。
应该把$i改成$$i这样make在Makefile上下文环境下的变量代换这步发现$$,是转义的$符号,于是$i不进行变量代换。在shell环境下执行for语句才把$i代入。这样才是想要的效果。