到底是什么导致了 make 中“系统找不到指定的文件”问题?

到底是什么导致了 make 中“系统找不到指定的文件”问题?

这是我的简单 Makefile:

运行.exe:链接
    gcc link.o -o 运行

link.o: main.o fun.o
    ld -r main.o fun.o -o link.o

main.o: main.c
    gcc -c main.c -o main.o

fun.o:函数文件.c
    gcc -c functionfile.c -o fun.o

干净的:
    德尔*.o
    删除*.exe

问题并不是真正关于创建“run.exe”,我知道有几种创建它的方法。但是,当我编写 **Makefile** 时,我不小心忘记在依赖于“run.exe”的“link”之后写入“.o”(当我在运行“make”后发现以下错误时我知道这一点):
gcc -c main.c -o main.o
gcc -c functionfile.c -o fun.o
ld -r main.o fun.o -o link.o
cc   link.o   -o link
process_begin: CreateProcess(NULL, cc link.o -o link, ...) failed.
make (e=2): The system cannot find the file specified.
<builtin>: recipe for target 'link' failed
make: *** [link] Error 2

我猜它所说的找不到的文件是link因为它以前不存在并且没有任何 Makefile 命令创建它。我的问题是,如果link找不到目标 2,3 和 4 的命令如何成功运行并能够创建各自的.o文件?为什么在link没有执行任何命令的情况下没有找到ie时不同时返回?如果我的猜测是正确的或错误的,请帮我排序,告诉我正在发生的实际情况和问题!!?这是什么recipe for target 'link' failed,因为我没有任何名为 的目标link

答案1

问题来自于你的第一行Makefile

run.exe: link

这导致 Make 尝试找出如何创建link.它知道如何link构建link.o,因此它使用提供的规则来创建link.o,然后尝试link使用其引用的内置规则来创建cc。但你没有cc.exe命令,所以它失败了——这就是丢失的文件。所有这些都解释了“<builtin>:目标'链接'的配方失败”错误消息:Make在尝试link使用内置规则创建时失败。

要解决此问题,请指定正确的先决条件:

run.exe: link.o
    gcc $^ -o $@

这使用自动变量来避免规则中的重复信息:$^代表“所有先决条件”( link.o),$@代表“目标的文件名”( run.exe)。

相关内容