我在makefile上相当新。我正在尝试创建一个编译yu.c和链接yu.c的makefile来获取一个名为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
答案 0 :(得分:2)
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中所述。
答案 1 :(得分:0)
第一个目标是未指定参数时选择的目标。 标准是首先有一个'所有'目标:
全部:yu此外,您的'yu'目标不正确。
yo: yufile.o
$(CC) -o $@ $^
应该有效