日期:2014-05-16  浏览次数:20572 次

有关Makefiel的问题

有个问题困扰着我好久了!

在写Makefile的时候,生成点O文件后的依赖文件一定都要写吗?特别是头文件(自己写的头文件)都要列表出来吗?

如果我的头文件中还引用了另外一个头文件呢?又怎么写?

如:

main.c文件

#include"tanghui.h"


tanghui.h文件
#include"th.h"
.
.
.
.
.

是这样的依赖关系,我的Makefile怎么写呢?

请高手指点一下!

------解决方案--------------------
这个不需要手动去一个个的加;可以利用gcc 的机制自动生成依赖关系。
可以参考下面的makefile(假定main.c, tanghui.h, 以及 makefile 在同一个目录):

C/C++ code

vpath = .
CPPFLAGS = -I .
SOURCES = main.c
main :  main.c

include $(subst .c,.d,$(SOURCES))

%.d: %.c
    $(CC) -M $(CPPFLAGS) $<  > $@.$$$$;  \
    sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
    rm -f $@.$$$$

------解决方案--------------------
刚才在我的机器上试了一下,上面那个makefile会有错误,改成下面的就可以了:
C/C++ code

vpath = .
CPPFLAGS = -I .
SOURCES = main.c
main :  main.o
main.o : main.c

include $(subst .c,.d,$(SOURCES))

%.d: %.c
    $(CC) -M $(CPPFLAGS) $<  > $@.$$$$;  \
    sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
    rm -f $@.$$$$