我有一组目录,其中一些包含 makefile,一些 makefile 有clean目标。在父目录中,我有一个简单的脚本:
#!/bin/bash
for f in *; do
if [[ -d $f && -f $f/makefile ]]; then
echo "Making clean in $f..."
make -f $f/makefile clean
fi
done
Run Code Online (Sandbox Code Playgroud)
当它使用没有(定义的)“干净”目标的 makefile 访问目录时,这会做一件奇怪的事情。例如,给定两个目录,one和two,包含;
一个/makefile
clean:
-rm *.x
Run Code Online (Sandbox Code Playgroud)
两个/makefile
clean:
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,“clean”没有指令,所以如果你运行“make clean”,two你会得到:
make: Nothing to be done for `clean'.
Run Code Online (Sandbox Code Playgroud)
对比如果没有“干净”:
make: *** No rule to make target `clean'. Stop.
Run Code Online (Sandbox Code Playgroud)
但是,对于我将要描述的问题,无论目标存在但未定义或不存在,结果都是相同的。clean.sh从父目录运行;
Making clean in one...
rm *.x
rm: cannot remove `*.x': No …Run Code Online (Sandbox Code Playgroud)