当我在shell上运行以下命令时,它可以正常工作。但是如果我在Makefile中写它并用“make”命令调用它就不起作用。
“make”命令后出现cp wpa_ {cli,supplicant,passphrase,event} / usr / local / bin /
错误:
cp:无法统计`wpa_ {cli,supplicant,passphrase,event}':没有这样的文件 或目录
如何使其与Makefile一起使用?我使用的是Ubuntu 12.04。相同的Makefile适用于其他Linux发行版。
答案 0 :(得分:21)
默认使用老式Bourne shell(/ bin / sh),不支持大括号扩展。如果尚未设置,请将生成文件中的SHELL变量设置为/ bin / bash。
答案 1 :(得分:0)
正如史蒂夫·K(Steve K)解释的那样,这是一种bashism。如果您想更严格地遵守标准,则可以使用for循环而不会遇到太多麻烦。
for x in cli supplicant passphrase event; do cp -v wpa_$$x /usr/local/bin/; done
像往常一样,将makefile文件全部放在一行中,或使用反斜杠将其分成几行。双美元符号表示make需要将$
传递给shell。
答案 2 :(得分:0)
我喜欢@bk 的回答,因为它符合该工具的约定,但作为参考,您也可以直接调用 bash shell 只用一个命令来进行大括号扩展:
wpa_files := $(shell /bin/bash -c 'echo wpa_{cli,supplicant,passphrase,event}')
target:
cp $(wpa_files) /usr/local/bin/