0

生成文件:

all: a.out

a.out: b.o a.o 
    gcc -o b.o a.o

a.o: a.c 
    gcc -c a.c

b.o: b.c 
    gcc -c b.c

.PHONY:clean

clean:
    rm *.o a.out

make提供信息:

错误:未定义对“主要”的引用

收集 2:ld 返回 1

制作:* [a.out] 错误 1

但是当将源文件放入 Eclipse CDT 时a.cb.c它编译得很好。请解释我的问题是什么makefile

PS:交流:

int global_1 = 100;

公元前:

extern int global_1;

int main()
{
    int global_2 = global_1 * 2;
    return 0;
}
4

2 回答 2

1

此规则未指定正确的结果文件:

a.out: b.o a.o 
    gcc -o b.o a.o

它应该是

a.out: b.o a.o 
    gcc -o "$@" b.o a.o

这就是违反Paul 的 Makefile 规则之一的结果。顺便说一句,“给出错误”的不是makefile,而是编译,特别是链接器。

于 2013-09-06T14:29:53.123 回答
0

这:

a.out: b.o a.o 
    gcc -o b.o a.o
        \----/
           |
           |
     this says "name
     the output b.o"

正在用输出文件覆盖b.o目标文件。我很确定自己make足够聪明,可以在没有任何输入的情况下计算出所需的命令,因此请尝试删除第二行。

于 2013-09-06T14:29:31.063 回答