Bash Makefile错误-在查找匹配的“”时出现意外的EOF';

Bash Makefile错误-在查找匹配的“”时出现意外的EOF';,bash,makefile,cp,Bash,Makefile,Cp,我的Makefile摘录如下: .PHONY: product1 product2 product3 product1 product2 product3: $(MAKE) $(MAKEPRGFLAGS) -C $(LIBS_ROOT)/$@ cp -r `ls -A | grep ".*\.a$"` $(PROJECT_PATH)/lib/ $(PRODUCT_PATH)/ 编译完成后,当它试图复制.a文件时,会出现以下错误: /bin/sh:命令替换:第0行:查找时出现意外

我的Makefile摘录如下:

.PHONY: product1 product2 product3
product1 product2 product3:
    $(MAKE) $(MAKEPRGFLAGS) -C $(LIBS_ROOT)/$@
    cp -r `ls -A | grep ".*\.a$"` $(PROJECT_PATH)/lib/ $(PRODUCT_PATH)/
编译完成后,当它试图复制
.a
文件时,会出现以下错误:

/bin/sh:命令替换:第0行:查找时出现意外EOF 用于匹配“%”

/bin/sh:命令替换:第1行:语法错误:意外结束 文件

我已注意提供匹配的大括号。我的Makefile声明中有什么错误


我正在Windows中的cygwin上运行。从Notepad++编辑Makefiles,并将EOL转换为Windows格式。

$在Makefiles中具有特殊意义。如果要在shell命令中使用它,必须将其加倍

product1 product2 product3:
    $(MAKE) $(MAKEPRGFLAGS) -C $(LIBS_ROOT)/$@
    cp -r `ls -A | grep ".*\.a$$"` $(PROJECT_PATH)/lib/ $(PRODUCT_PATH)/
但是,您不必使用
ls
grep
,只需将通配符赋给
ls

    cp -r *.a .*.a $(PROJECT_PATH)/lib/ $(PRODUCT_PATH)/

@gniourf_gniourf True。您可以启用
nullglob
以防止出现这种情况。如果两者都不匹配,则两种语法都无法正常工作。