Makefile和使用$$

时间:2013-10-25 12:31:26

标签: variables unix makefile

所以我有一个Makefile,其中我有以下代码,我试图理解:

for file_exe in `find . -name "zip_exe-*"`; do \
    ./$${file_exe} -d $(UNZIP_PATH)/lib; \
done

据我所知,这段代码将尝试找到一些可执行的zip并将这些zip文件解压缩到一个位置。但令我困惑的是$${file_exe}是如何运作的。为什么需要双$$?我想这与某些bash命令从makefile运行这一事实有关,但我无法向自己解释为什么需要$$而简单的$不起作用,因为这命令正在运行一个子shell。

1 个答案:

答案 0 :(得分:12)

需要区分是否要将$用作引入生成变量引用,例如${FOOBAR}或传递给shell的普通$。 make specification(Section Macros)表示要执行后者,必须使用由$$替换的$并传递给shell。实际上,您的代码段显示为

for file_exe in `find . -name "zip_exe-*"`; do \
   ./${file_exe} -d some/unzip/path/lib; \
done

到shell。

样式注释:迭代由反引号创建的文件列表被认为是错误的样式,因为它可能溢出ARG_MAX限制。最好用

逐个读取文件名
find . -name "zip_exe-*" | \
while read -r file_exe; do \
   ./${file_exe} -d some/unzip/path/lib; \
done