V_A = A
V_B = $(V_A) B
V_A = AA
# V_B: AA B
V_A := A
V_B := $(V_A) B
V_A := AA
# V_B: A B
V_A ?= A
V_A ?= AA
#V_A: A
V_A += A
V_A += AA
#V_A: A AA
#添加后缀
$(addsuffix .c, foo bar)
# foo.c bar.c
#过滤
objects=main.o foo.o add.o a.c b.c
$(filter %.c, $(objects))
#a.c b.c
#反过滤
objects=main.o foo.o add.o
mains=main.o
$(filter-out $(mains), $(objects))
#foo.o add.o
#循环
names := a b c d
file := $(foreach n,$(names),$(n).o)
#a.o b.o c.o d.o
#替换
$(subst _clean, _libs, all_clean )
# all_libs
#来源
V=0
$(origin V)
# 未定义过该变量时:undefined
# 该变量为环境变量:enviroment
# 变量是个默认定义:default
# 定义在Makefile:file
# 定义在命令行:command line
# 被override过:override
# 自动化变量(@,<等):automatic
#取首单词
$(firstword foo bar)
# foo
# “SHELL”和“MAKEFLAGS”,这两个变量除非使用“unexport”声明,否则的话在整个make的执行过程中,它们的值始终自动的传递给子make
MAKEFLAGS += -rR --include-dir=$(CURDIR)
# 上述代码使用“+=”来给变量MAKEFLAGS追加了一些值,“-rR”表示禁止使用内置的隐含规则和变量定义,
# “--include-dir”指明搜索路径,”$(CURDIR)”表示当前目录。
# @放在行首,表示不打印此行。
test:
echo "Hello World!"
@echo "Hello World!"
# echo "Hello World!"
# Hello World!
# Hello World!
# 循环
target:
for number in 1 2 3 4 ; do \
echo $$number ; \
done
# 1
# 2
# 3
# 4
# 显示变量
$(info $(TEST))
makefile相关知识点
最新推荐文章于 2023-09-27 17:30:30 发布