c语言 - 使文件错误 *** 没有规则来使目标"3","运行"需要。停



我正在为 C 创建一个 makefile,我正在通过命令行传递两个参数。这是我在命令行上运行的内容。

dipesh@ubuntu:~/Desktop$ make run H=3 C=3

但是我收到以下错误

Make File Error *** No rule to make target `3', needed by `run'.  Stop

这是我的制作文件

all: forkk.o
gcc -Wall fork.o -o forkk.out
forkk.o: forkk.c
gcc -Wall -c forkk.c
run: ./forkk.out $(H) $(C)
clean:
rm forkk

更具体地说,尤金的评论是:

run: ./forkk.out $(H) $(C)

是错误的。 您已将配方(要调用的命令(与目标放在同一行上,因此请认为配方命令实际上是一组先决条件。 运行时:

make H=3 C=3

此行扩展为:

run: ./forkk.out 3 3

并尝试找到一种方法来构建导致您看到的错误的先决条件"3"。

你想要这个:

run:
./forkk.out $(H) $(C)

如果你真的希望它在一行上,你必须使用;将规则与配方行分开:

run: ; ./forkk.out $(H) $(C)

这个规则...

run: ./forkk.out $(H) $(C)

......说"run"目标具有./forkk.out,变量的扩展$(H)$(C)作为其依赖项。 当你要求make构建该目标时 - 你这样做 - 它首先确保这些依赖项是最新的。 由于$(H)$(C)都扩展到3make在其工作目录中查找名为3的文件。 找不到任何此类文件,并且没有任何适用的规则来构建文件,它保释了。

相反,您可能是这个意思:

run:
./forkk.out $(H) $(C)

. 在那里,run目标没有依赖项,因此每次构建该目标时都会执行其配方,从下一行开始(和结束(。

但是,请注意,run目标确实对forkk.out真正的依赖性,修订后的规则没有表达这一点。 这可能也一样,因为它也不是目标,所以make不知道如何构建它。 更健壮的 Makefile 会同时引入依赖项和目标,如下所示:

all: forkk.out
forkk.out: forkk.o
gcc -Wall forkk.o -o forkk.out
forkk.o: forkk.c
gcc -Wall -c forkk.c
run:
./forkk.out $(H) $(C)

另请注意,clean规则会清除其他规则不会创建的文件,并且无法清理其他规则创建的某些文件。 它可能应该是

clean:
rm -f forkk.out forkk.o

最新更新