C 生成文件错误***没有规则生成目标'3';,由'run';所需;。停止
我正在为C创建一个makefile,我正在通过命令行传递两个参数。这就是我在命令行上运行的内容C 生成文件错误***没有规则生成目标'3';,由'run';所需;。停止,c,makefile,C,Makefile,我正在为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.
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)
这是错误的。您已经将recipe(要调用的命令)与目标放在同一行,因此make认为recipe命令实际上是一组先决条件。运行时:
make H=3 C=3
该行扩展为:
run: ./forkk.out 3 3
make试图找到一种方法来构建导致您看到的错误的先决条件“3”
你想要这个:
run:
./forkk.out $(H) $(C)
如果你真的希望它在一行上,你必须使用
将规则与配方行分开:
run: ; ./forkk.out $(H) $(C)
这条规则
。。。表示“run”目标将/forkk.out
和变量的扩展$(H)
和$(C)
作为其依赖项。当您要求make
构建该目标时——您需要这样做——它首先确保这些依赖项是最新的。由于$(H)
和$(C)
都扩展到3
,make
在其工作目录中查找名为3
的文件。没有找到任何这样的文件,也没有任何适用的规则来构建一个文件,它就退出了
你的意思可能是:
run:
./forkk.out $(H) $(C)
。在那里,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
将
:
之后的内容移动到下一个缩进行。请注意,您的all
规则的编译行使用fork.o
,但这不可用(并且依赖项位于forkk.o
)。通常,您会使all
依赖于forkk.out
,并且有一个规则从forkk.o
编译forkk.out
(或者使用内置规则直接从forkk.c
)来编译forkk.out
。使用asremake-x
来调试Makefile
clean:
rm -f forkk.out forkk.o