我正在尝试创建具有两个目标的Makefile:设置和清洁。设置目标应该在/ 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
您的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
(您的参数排在最前面)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句