我们常常拿到一个代码,不知道从哪里入手,不清楚每个文件的依赖关系,代码的组织结构,这个时候,就需要从Makefile入手,分析代码的文件结构。 可是Makefile有些时候写的很复杂,我们就需要借助调试信息来帮助我们理解Makefile的文件组织结构
SRC := ./src/test1.c
SRC += ./src/test2.c
INC := ./inc/test.h
$(info SRC = $(SRC))
$(warning INC = $(INC)) #会打印行号
#注意:执行到error会直接stop退出
$(error INC = $(INC))
test:
@echo SRC=$(SRC)
@echo INC=$(INC)
$(info SRC = $(SRC))
$(warning INC = $(INC))
#注意:执行到error会直接stop退出
$(error INC = $(INC))
SRC := ./src/test1.c
SRC += ./src/test2.c
INC := ./inc/test.h
#使用到了 $*、模式目标相关知识,可以加入到最后一行,但不会进行编译
print-% : ; @echo $* = $($*)
需要打印变量SRC时,只需要执行
make print-SRC
print-% : ; @echo $* = $($*)
因为在每个Makefile中都加入这一行,是比较繁琐的事情,这个时候,我们就可以创建一个文件
vim vars.mk
%:
@echo '$*=(*)'
d-%:
@echo '$*=(*)'
@echo ' origin = (origin*)'
@echo ' value = $(value $*)'
@echo ' flavor = (flavor*)'
用法是
make -f Makefile -f var.mk d-SRC
3.有些时候,我们看到一个Makefile ,想看一下它的编译过程,但又不需要编译他,这个时候就可以使用 make --just-print 或者 make -n
make --just-print
make -n