我有一个没有正确编译的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。
这有什么原因吗?
答案 0 :(得分:4)
您不要告诉对象文件graph_support.o
做任何事情,因此它决定使用默认规则进行编译(更多信息:man make
,make -p
,gnu 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
...