install -D安装
install -D src_dir dst_dir
eg: install -D bin/aaa /usr/bin/bbb
# 功能1: 中间目录如何不存在,自动创建
# 功能2: 复制src_dir 到 dst_dir
-j8任务数
#运行8个并行编译任务
make -j8
$(@D) [当前目录文件]的目录名
make -j1 -C $(@D) xxx
#make 运行一个任务, 切换到指定目录,如当前目录文件是build/aaa/bbb.o, 对应目录是build/aaa
$(origin var)检测变量是如何被定义
ifeq ("$(origin O)", "command line")
# $(origin VAR) 的意思: $(origin O) 是 GNU Make 的一个内置函数,用来检测变量 O 是如何被定义的。
# 可能的返回值有:
'''
command line :命令行变量
file :Makefile中定义
environment:环境变量
default:默认值
override:覆盖方式
undefined :未定义
'''
ifeq (A, B)相等判断
# ifeq (A, B)
# ifeq 是 GNU Make 的条件判断语法。
# 当 A 和 B 相等时,“条件成立”,会执行随后的语句块(直到 next endif)。
ifeq ($(VAR),)
endif
$(shell which rpmbuild)
$(shell ...) 是 Make 的内建函数,用来在 shell(命令行)里执行一条命令,并把输出结果作为文本返回。
不同等号
DATA ?= AAA, DATA := AAA, DATA = AAA
语法 类型 何时赋值/展开 是否可被覆盖 用途说明
DATA = AAA 递归赋值 使用时递归求值 可以 最常用方式
DATA := AAA 简单赋值 声明时立即求值 可以 适合一次性展开
DATA ?= AAA 条件赋值 只有未定义时赋值 一旦有定义则不再赋值 优先用户指定/环境
DATA = AAA —— "递归展开赋值"(标准赋值)
普通赋值,递归展开(lazy evaluation)。
当用到 DATA 时,才会对表达式进行解析。
可以使用其他变量,表达式会在使用时“动态替换”。
DATA := AAA —— "立即展开赋值"(简单赋值)
立即求值/展开(immediate evaluation)。
变量右侧表达式立即被解析并赋值,后续再用不会重新展开。
适合右侧带复杂引用或函数,希望只展开一次。
DATA ?= AAA —— "条件赋值"(只在未定义时赋值)
条件赋值:如果DATA没有被预先定义(如命令行传入、环境变量或之前在Makefile设置),则赋值为AAA。
否则不做更改。
$(strip ...) 去掉字符串前后的空白符
$(strip ...)
去掉传入字符串头尾的所有空格(前后空白符)。
$(subst FROM,TO,TEXT) 字符替换
$(subst FROM,TO,TEXT)
在 TEXT 字符串中,把所有的 FROM 替换为 TO。
运行带参数递归赋值
qstrip = $(strip $(subst ",,$(1)))
VAL := " Hello World "
CLEAN = $(call qstrip,$(VAL))
'''
展开过程:
$(subst ",, $(VAL))
= Hello World (去掉双引号)
$(strip ...)
= Hello World (去掉头尾空格)
最终 CLEAN 得到值 "Hello World"(不含头尾空格也不含引号)。
'''
1165

被折叠的 条评论
为什么被折叠?



