【问题标题】:Makefile error - unexpected EOF while looking for matching `"'Makefile 错误 - 寻找匹配的 `"' 时出现意外的 EOF
【发布时间】:2017-05-23 06:08:40
【问题描述】:

我的 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++ 编辑 Makefile,EOL 转换为 windows 格式。

【问题讨论】:

    标签: bash makefile cp


    【解决方案1】:

    $ 在 makefile 中有特殊含义。如果你想在 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 来防止这种情况。如果它们都不匹配,则两种语法都不会正常工作。
    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多