Makefile错误 - 寻找匹配的`"`时出现意外的EOF

3
我的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: command substitution: line 0: unexpected EOF while looking for matching `"'

/bin/sh: command substitution: line 1: syntax error: unexpected end of file

我已确认花括号是匹配的,我的 Makefile 声明有什么问题吗?
我正在 Windows 上的 cygwin 上运行。使用 Notepad++ 编辑 Makefile,EOL 转换为 Windows 格式。
1个回答

7

$ 在 makefiles 中有特殊的含义。如果你想在 shell 命令中使用它,必须将其加倍。

product1 product2 product3:
    $(MAKE) $(MAKEPRGFLAGS) -C $(LIBS_ROOT)/$@
    cp -r `ls -A | grep ".*\.a$$"` $(PROJECT_PATH)/lib/ $(PRODUCT_PATH)/

但是,与其使用 lsgrep,你可以直接给 ls 通配符:

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

@gniourf_gniourf 确实。你可以启用nullglob来防止这种情况发生。如果两者都不匹配,那么语法将无法正确工作。 - Barmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接