makefile相关知识点

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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值