相关疑难解决方法(0)

使用“make -f”自动化的奇怪行为

我有一组目录,其中一些包含 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)

make gnu-make

7
推荐指数
1
解决办法
2218
查看次数

标签 统计

gnu-make ×1

make ×1