makefile没有正确编译

时间:2013-11-20 04:07:25

标签: c makefile

我有一个没有正确编译的make文件,我无法弄清楚原因。这是我的档案:

comp = gcc
comp_flags = -g -Wall 
comp_libs = -lm  
#comp = cc

lab6 : graph_support.o lab6.o
    $(comp) $(comp_flags) graph_support.o lab6.o -o lab6 $(comp_libs)

graph.o : graph_support.c graph.h
    $(comp) $(comp_flags) -c graph_support.c

lab6.o : lab6.c graph.h
    $(comp) $(comp_flags) -c lab6.c

clean :
    rm -f *.o lab6 core

现在我做这件事时会发生什么:

cc    -c -o graph_support.o graph_support.c
gcc -g -Wall  graph_support.o lab6.o -o lab6 -lm

第二个正常工作,但第一个没有正确的comp和comp_flags。

这有什么原因吗?

1 个答案:

答案 0 :(得分:4)

您不要告诉对象文件graph_support.o做任何事情,因此它决定使用默认规则进行编译(更多信息:man makemake -pgnu docs)。

所以,您可能需要更改graph.o:

graph.o : graph_support.c graph.h
    $(comp) $(comp_flags) -c graph_support.c

到graph_support.o:

graph_support.o : graph_support.c graph.h
    $(comp) $(comp_flags) -c graph_support.c

通常与默认(隐式)规则一起使用。您可以将编译标志添加到CFLAGS变量(而不是comp_flags),您将不需要像

这样的规则
graph_support.o : graph_support.c
...
lab6.o : lab6.c
...