2015-10-15 64 views
0

我想运行一个简单的makefile,看起来像这样:Makefile的错误 - 链接器输入文件未使用

T=-ansi -pedantic -Wall -Werror 
a.out: test.o extra.o 
    gcc $(T) -c test.o extra.o 

test.o: test.c test.h 
    gcc $(T) -c test.c 

extra.o: extra.c extra.h 
    gcc $(T) -c extra.c 

clean: 
    rm *.o a.out 

但我似乎得到警告,告诉我,“链接器输入文件未使用的,因为链接尚未完成“

我试图消除‘从a.out的指令-c’,海湾合作委员会后,但产生的给我更多的问题。我不知道如何从这里开始,任何想法/投入将不胜感激。

编辑:我的“让-T”运行程序,也去除的a.out的-c,导致错误“无效的符号索引”

+0

对不起,我在运行它像“让-T”,另外,如果我去掉-c,我得到的问题“无效的符号索引” – user3739406

+0

查看答案......但'使-T'是奇数;那是做什么的? '无效的符号索引'表明你应该删除所有'.o'文件并且从头再次运行。 –

+0

My Assigment指定使用通过T命令构建的makefile(makefile中的第一行)。 – user3739406

回答

0

您需要从a.out删除-c命令:

a.out: test.o extra.o 
    gcc $(T) test.o extra.o 

,或者更好:

a.out: test.o extra.o 
    gcc $(T) -o [email protected] test.o extra.o 

,或者还更好:

extra: test.o extra.o 
    gcc $(T) -o [email protected] test.o extra.o 

错误消息通常是因为您在命令行上指定了类似-lm的东西,其中-c,但您在这里没有这样做。 OTOH,你列出所有与-c选择目标文件 - 这会产生警告:

gcc -ansi -pedantic -Wall -Werror -c test.o extra.o 
           ^this one, here 

那些.o文件是连接器的输入,但是你没有连接。删除-c,您将生成a.out。这应该继续。

我觉得这是我第一次见过用来建立a.out一个makefile。这是极不寻常的 - 并非完全错误,但绝对不是您通常使用的方式make。它内置规则来构建从单一来源文件,如exampleexample.c程序。通常,您根据其中一个源文件为程序提供一个有意义的名称。请注意,创建程序test通常是一个糟糕的主意;在典型的shell中内置了一个标准的test命令,混淆非常猖獗。

相关问题