我对makefile相当陌生。我正在尝试创建一个编译 yu.c 的 makefile 并链接 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
(请注意,如果已经有名为 all
的文件,该.PHONY
可以防止make
不执行任何操作)。
值得指出的是:你的论点在yu
目标中颠倒了。它应该是
yu: yuFile.o
${CC} yuFile.o -o yu
或更一般
yu: yuFile.o
${CC} $^ -o $@
($^
表示所有先决条件,$@
表示目标,如自动变量中所述)。
第一个目标是在未指定参数时选取的目标。标准是首先有一个"全部"目标:
全部:于
文此外,您的"yu"目标不正确。
yo: yufile.o
$(CC) -o $@ $^
应该工作