我对makefile相当陌生。我正在尝试创建一个makefile,它编译yu.c并链接yu.c以获得一个名为yu的可执行文件。
下面是我的代码。我使用make-f mymakefile来运行该文件,每次运行它时,只完成gcc-c yufile.c。
我错在哪里?

CC=gcc

yu.o: yuFile.c
    ${CC} -c yuFile.c
yu: yuFile.o
    ${CC} yu -o yuFile.o
run-c: yu
    ./yu
clean:
    rm -f "*.o" core

最佳答案

make如果未指定目标,则会生成文件中的第一个目标,因此在您的情况下,它相当于make yu.o
通常,您将第一个目标设置为all,以便构建所有内容:

all: yu
.PHONY: all

(注意,如果已经有一个名为.PHONY的文件,make会阻止all不执行任何操作)。
值得指出的是:您的论点在yu目标中被颠倒了。应该是
yu: yuFile.o
    ${CC} yuFile.o -o yu

或者更一般
yu: yuFile.o
    ${CC} $^ -o $@

$^表示所有前置需求,$@表示目标,如Automatic Variables中所述)。

10-06 07:49