Makefile 编写 tips

1、变量赋值

VARIABLE = value #在执行时扩展,允许递归扩展

VARIABLE := value #在定义时扩展

VARIABLE ?= value #只有在该变量为空时才设置该值

VARIABLE += value #将值追加到变量尾端

2、自动变量

$@指代当前目标,就是Make命令当前构建的那个目标。比如,make foo的$@就指代foo

$<指代第一个前置目标,比如规则为 t : p1 p2,那么$<就指代p1

$?指代比目标更新的所有前置条件,之间用空格分隔,比如规则为t: p1 p2,其中p2的时间戳比t新,$?就指代p2

$^指代所有前置条件,之间以空格分隔,比如规则为t : p1 p2,那么$^就指代 p1 p2

$(@D)和$(@F)分别指向$@的目录名和文件名,比如,$@是src/input.c,那么$(@D)的值就为src,$(@F)的值就为input.c

3、函数

wildcard函数:src=$(wildcard *.c),搜索当前目录下所有以.c结尾的文件,生成一个以空格间隔的文件名列表,并赋值给src

patsubst函数:obj=$(patsubst %.c, %.o, $(src)),匹配替代,将src中找到的所有.c结尾的文件,然后把所有.c转换成.o

原文地址:https://www.cnblogs.com/YaoDD/p/6185910.html