我正在尝试创建一个具有两个目标的 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 有两个错误:
它依赖于
bash
(或具有相同数组语法的 shell),而不将make
变量设置SHELL
为/bin/bash
(或 shell 可执行文件的任何路径)。它依赖于在同一 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 \;
另外,这不依赖于bash
shell 使用的 shell make
,并且它还将参数的顺序更正为cp
(您的参数从后到前)。