$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表
% 仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是“foo.a(bar.o)”,那么,“ %”就是“bar.o”,“$@”就是“foo.a”。如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么,其值为空。
+ 这 个 变 量 很 像 “ + 这个变量很像“ +这个变量很像“^”,也是所有依赖目标的集合。只是它不去除重复的依赖目标。
∗ 这 个 变 量 表 示 目 标 模 式 中 “ * 这个变量表示目标模式中“%”及其之前的部分。如果目标是“dir/a.foo.b”,并且目标的模式是“a.%.b”,那么,“ ∗这个变量表示目标模式中“”的值就是“dir/a.foo”。这个变量对于构造有关联的文件名是比较有较。如果目标中没有模式的定义,那么“ ∗ ” 也 就 不 能 被 推 导 出 , 但 是 , 如 果 目 标 文 件 的 后 缀 是 m a k e 所 识 别 的 , 那 么 “ *”也就不能被推导出,但是,如果目标文件的后缀是make所识别的,那么“ ∗”也就不能被推导出,但是,如果目标文件的后缀是make所识别的,那么“”就是除了后缀的那一部分。例如:如果目标是“foo.c”,因为“.c”是make所能识别的后缀名,所以,“ ∗ ” 的 值 就 是 “ f o o ” 。 这 个 特 性 是 G N U m a k e 的 , 很 有 可 能 不 兼 容 于 其 它 版 本 的 m a k e , 所 以 , 你 应 该 尽 量 避 免 使 用 “ *”的值就是“foo”。这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用“ ∗”的值就是“foo”。这个特性是GNUmake的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用“”,除非是在隐含规则或是静态模式中。如果目标中的后缀是make所不能识别的,那么“$”就是空值。
原文:https://blog.csdn.net/jeffrey0000/article/details/12421317