makefile中关于.d文件的疑问
发表于 : 2019-01-05 22:34
makefile文件:
DEPS=$(addprefix $(BIN_DIR)/,$(patsubst %.c,%d,$(SRCS)))
sinclude $(DEPS)
OBJECTS=$(addprefix $(BIN_DIR)/,$(patsubst %.c,%.o,$(SRCS)))
$(BIN_DIR)/%.d:%.c:
@set -e;rm -f $@;
gcc -MM $< > $@.$$$$;\
sed 's,\($*\)\.o[:]*,\1.o $@:,g' < $@.$$$$ >$@;\
echo -e -n "\t\x24gcc -c \24< -o \x24@" >> $@;\
$(RM) $@.$$$$
这段代码是在将SRCS文件中的所有.c文件的依赖关系写入到.d文件中去。但是对于代码的执行顺序有点疑问。
1 进入SRCS文件夹的时候,并没有.d文件。此时sinclude $(DEPS) 后会将$(DEPS) 添加到makefile文件中,也就是 $(BIN_DIR)/%.d这个目标,添加后,会自动去执行$(BIN_DIR)/%.d这个目标,然后生成.d文件?
2 生成了.d文件后,.d文件中的依赖关系又是如何添加进makefile文件里面的呢?
3 对于echo -e -n "\t\x24gcc -c \24< -o \x24@" >> $@;\的意义不是很清楚,将gcc的命令写入到.d文件的目的是什么?
自己了做一个测试:makefile文件
sinclude main.d
debug :
@echo $@
main.d的内容如下
main.o main.d: main.c head/calc.h
当执行这个makefile文件的时候自动执行了 编译的命令,这是为什么呢
cc -c -o main.o main.c
main.c: In function ‘main’:
main.c:10:7: warning: implicit declaration of function ‘calculate’ [-Wimplicit-function-declaration]
c=calculate(n,k);
DEPS=$(addprefix $(BIN_DIR)/,$(patsubst %.c,%d,$(SRCS)))
sinclude $(DEPS)
OBJECTS=$(addprefix $(BIN_DIR)/,$(patsubst %.c,%.o,$(SRCS)))
$(BIN_DIR)/%.d:%.c:
@set -e;rm -f $@;
gcc -MM $< > $@.$$$$;\
sed 's,\($*\)\.o[:]*,\1.o $@:,g' < $@.$$$$ >$@;\
echo -e -n "\t\x24gcc -c \24< -o \x24@" >> $@;\
$(RM) $@.$$$$
这段代码是在将SRCS文件中的所有.c文件的依赖关系写入到.d文件中去。但是对于代码的执行顺序有点疑问。
1 进入SRCS文件夹的时候,并没有.d文件。此时sinclude $(DEPS) 后会将$(DEPS) 添加到makefile文件中,也就是 $(BIN_DIR)/%.d这个目标,添加后,会自动去执行$(BIN_DIR)/%.d这个目标,然后生成.d文件?
2 生成了.d文件后,.d文件中的依赖关系又是如何添加进makefile文件里面的呢?
3 对于echo -e -n "\t\x24gcc -c \24< -o \x24@" >> $@;\的意义不是很清楚,将gcc的命令写入到.d文件的目的是什么?
自己了做一个测试:makefile文件
sinclude main.d
debug :
@echo $@
main.d的内容如下
main.o main.d: main.c head/calc.h
当执行这个makefile文件的时候自动执行了 编译的命令,这是为什么呢
cc -c -o main.o main.c
main.c: In function ‘main’:
main.c:10:7: warning: implicit declaration of function ‘calculate’ [-Wimplicit-function-declaration]
c=calculate(n,k);