我对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中所述)。