错误“/bin/sh: 1: 语法错误:Makefile 中的”(“意外”

错误“/bin/sh: 1: 语法错误:Makefile 中的”(“意外”

我正在尝试创建一个具有两个目标的 Makefile:setup 和 clean。安装目标应该找到 /usr/lib/man-db 中的所有文件并将它们复制到目录 proj/lib 中。

setup:
    files=( $( find /usr/lib/man-db -name "*.so" ) )
    mkdir proj; cd proj; mkdir lib bin
    cd
    cp $HOME/proj/lib "${files[@]}"
clean:
    rm -r proj

答案1

你的 Makefile 有两个错误:

  1. 它依赖于bash(或具有相同数组语法的 shell),而不将make变量设置SHELL/bin/bash(或 shell 可执行文件的任何路径)。

  2. 它依赖于在同一 shell 实例中运行的每个操作。通常,每个操作行都由分离 $SHELL/bin/sh默认情况下),这意味着您不能在一行上设置 shell 变量,然后在另一行上使用它,或者cd进入一个目录,然后假设您仍然位于 Makefile 下一行的同一目录中。

我可能会将setup目标重写为类似的东西

setup:
    mkdir -p proj/lib proj/bin
    find /usr/lib/man-db -type f -name '*.so' -exec cp {} proj/lib \;

另外,这不依赖于bashshell 使用的 shell make,并且它还将参数的顺序更正为cp(您的参数从后到前)。

相关内容