1

我对makefile相当陌生。我正在尝试创建一个编译 yu.c 并链接 yu.c 以获取名为 yu 的可执行文件的 makefile。
下面是我的代码。我正在使用 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
4

2 回答 2

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 $@

$^表示所有先决条件,并$@表示目标,如自动变量中所述)。

于 2012-10-14T17:50:43.433 回答
0

第一个目标是未指定参数时选择的目标。标准是首先要有一个“全部”目标:

全体:于

此外,您的“yu”目标不正确。

yo: yufile.o
   $(CC) -o $@ $^

应该管用

于 2012-10-14T17:51:30.413 回答