Makefile学习笔记

  • 赋值符“=”
    "="右边变量的值可能出现在赋值语句之前或者之后
  • 赋值符“:=”
    ":="右边变量的值只能出现在赋值语句之前
  • 赋值符“?=”
    "?="左边的变量未定义时赋值才会发生
  • 变量追加“+=”
    追加前会自动添加空格
  • 模式规则
    至少在规则的目标定义中要包涵“%”,否则就是一般规则
    目标中的“%”表示对文件名的匹配,“%”表示长度任意的非空字符串
    当“%”出现在目标中的时候,目标中“%”所代表的值决定了依赖中的“%”值
  • 自动变量
    自动化变量就是这种变量会把模式中所
    定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该出现在规则的命令中
自动化变量 描述
$@ 规则中的目标集合,在模式规则中,如果有多个目标的话,“$@”表示匹配模式中定义的目标集合。
$% 当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,那么其值为空。
$< 依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%” )定义的,那么“$<”就是符合模式的一系列的文件集合。
$? 所有比目标新的依赖目标集合,以空格分开。
$^ 所有依赖文件的集合,使用空格分开,如果在依赖“$^”会去除重复的依赖文件,值保留一份。
$+ 和“$^”类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。
$* 这个变量表示目标模式中"%"及其之前的部分,如果目标是 test/a.test.c,目标模式为 a.%.c,那么“$*”就是 test/a.test。
  • Makefile 伪目标
    当有和目标同名的文件时,规则因为没有依赖文件,所以目标被认为是最新的
    使用.PHONY:声明
  • 条件判断
    ifeq,ifneq,ifdef,ifndef
    语法为:
    ifeq...endif或者ifeq...else...endif
  • 函数
    不支持自定义函数
    用法为$(函数名 参数集合)
    subst:用来完成字符串替换
    patsubst:用来完成模式字符串替换
    dir:用来获取目录
    notdir:获取文件名
    foreach:循环
    wildcard:通配符“%”只能用在规则中,只有在规则中它才会展开,如果在变量定义和函数使用时,通配符不会自动展开,这个时候就要用到函数 wildcard
上一篇:Linux C : Makefile 的编写和示例


下一篇:linux下c语言编程通用的makefile文件编写