学习makefile, 记录一些参数的使用
常用参数
| 参数 | 说明 | 示例 | 注释 |
|---|---|---|---|
| -jn | 使用多核编译,n为使用核心数量,最多为CPU内核个数 | make -j2 | 使用两个内核编译 |
| -j | 自动使用CPU最大的核心数量编译 | make -j | 我的电脑为4核等效make -j4 |
| NAME=param | 使用make命令行传递参数到makefile | make BUILD_DIR=build | 等效为在makefile中定义变量BUILD_DIR=build |
| -n | 只显示不执行makefile | make -n | 打印makefile所执行的命令 |
常用符号
| 类型 | 符号 | 作用 | 描述 |
|---|---|---|---|
| 文件名通配符 | * | 匹配任意字符 | *.c : 所有.c结尾的文件 |
| ? | 匹配任意字符 | 包含空 | |
| 常用符 | \ | 命令换行符 | |
| 运算符 | = | 变量赋值 | object = fi.o 用于所赋值的对象是常量 |
| ?= | 为空赋值 | 若变量没有赋值,则给它赋值,否则不赋值 | |
| := | 变量赋值 | object := ${tmp} 用于赋值是个变量 | |
| += | 追加赋值 | object += tmp.o 将tmp.o追加到object | |
| 自动化变量 | $@ | 当前target | 当前目标名 |
| $< | 第一个依赖名 | ||
| $^ | 所有依赖名 | 去重target:d1 d2 则 $^=d1 d2 | |
| $+ | 所有依赖名 | 不去重 | |
| $? | 比目标新的依赖名 | ||
| $* | 目标中%匹配的部分 | %.o:%.c 。有a.o目标时$*值为a | |
| $(@D) | 目标的目录部分 | 目标为tmp/test,$(@D)值为tmp | |
| $(@F) | 目标的文件部分 | 目标为tmp/test,$(@D)值为test | |
| $(<D) | 依赖文件的目录部分 | ||
| $(<F) | 依赖文件的文件部分 | ||
| $(^D) | 所有依赖文件的目录部分 | 去重 | |
| $(^F) | 所有依赖文件的文件部分 | 去重 | |
| $(+D) | 所有依赖文件的目录部分 | 不去重 | |
| $(+F) | 所有依赖文件的文件部分 | 不去重 | |
| $(?D) | 被更新的依赖文件的目录部分 | ||
| $(?F) | 被更新的依赖文件的文件部分 | ||
| 特别字符 | % | 任意匹配符 | 类似shell的 * |
| @ | 不显示执行命令 | command前加@后 不打印改条命令 | |
| - | 出错不中断 | command前加-,出现执行错误不中断makefile编译 |
Makefile参数与符号详解
本文深入解析Makefile中的关键参数如-jn、-n,以及符号如*、?、、=等的使用场景与功能,帮助读者掌握高效编译技巧。同时,介绍了自动化变量如$@、$<、$^的作用,便于理解和应用。

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



