当前位置: 技术问答>linux和unix
求助Makefile的写法:如何为每一个.c文件自动生成其包含的.h文件集合? 内详
来源: 互联网 发布时间:2016-07-20
本文导语: 我的这个Makefile有缺陷,当改动了.h文件的内容时,相关的.c文件不被重新编译 :( 26 # exec file and dest dir to copy to. 27 EXEC = terminal.mips 28 PREFIX := /nfs 29 30 31 # ge...
我的这个Makefile有缺陷,当改动了.h文件的内容时,相关的.c文件不被重新编译 :(
26 # exec file and dest dir to copy to.
27 EXEC = terminal.mips
28 PREFIX := /nfs
29
30
31 # get source and include files
32 CPP_SRC = $(shell find . -iname '*.cpp')
33 C_SRC = $(shell find . -iname '*.c')
34 OBJS = $(CPP_SRC:.cpp=.o) $(C_SRC:.c=.o)
35 HEADERS = $(shell find . -iname '*.h')
36
37
38
39 # compile it
40 all: $(EXEC)
41 $(EXEC): $(OBJS) $(HEADERS)
42 $(CXX) -o $@ $(OBJS) $(LDFLAGS)
|
放到makefile的最后,自动创建对.h的依赖关系。make会执行两遍,第一遍发现没有deps文件,然后生成,然后在解析一遍makefile。至于clean,自己加好了。
deps = $(subst .cpp,.dpp,$(filter %.cpp,$(srcs)))
deps += $(subst .c,.d,$(filter %.c,$(srcs)))
include $(deps)
%.dpp: %.cpp
@set -e; $(RM) $@;
$(CC) -MM $(CPPFLAGS) $ $@.$$$$;
sed 's,($(notdir $*)).o[ :]*,$(basename $@).o $@ : ,g' $@;
$(RM) $@.$$$$
%.d: %.c
@set -e; $(RM) $@;
$(CC) -MM $(CPPFLAGS) $ $@.$$$$;
sed 's,($(notdir $*)).o[ :]*,$(basename $@).o $@ : ,g' $@;
$(RM) $@.$$$$