target ... : prerequisites ...
command
target //目标文件,O文件 或者是可执行文件
prerequisites //生成target所需要的文件或者目标
command //make需要执行的命令(任意shell命令),makefile中的命令必须以[tab]开头
#符号:用于注释,如果要显示符号本身,需要进行转义,#
@符号:
通常makefile会将其执行的命令行执行前输出到屏幕上。
如果@加到命令行前,这个命令将不被make回显出来。
-符号:
通常删除或创建文件如果碰到文件不存在或者已经创建了,那么希望忽略掉这个错误,继续执行。
-rm dir;
-mkdir aaadir;
+符号:
它的意思和 '-' 相反,表示不忽略
$符号:
主要是扩展打开makefile中定义的变量
符号:换行符,方便显示。将太长的一行分割成多行方便显示,逻辑上还是一行;
$@ //目标文件,
$^ //所有的依赖文件
$< //第一个依赖文件
$?
“=”说明:
VIR_A = A
VIR_B = $(VIR_A) B
VIR_A = AA
经过上面的赋值后,最后VIR_B的值是AA B,而不是A B。在make时,会把整个makefile展开,拉通决定变量的值
“:=”说明:
VIR_A := A
VIR_B := $(VIR_A) B
VIR_A := AA
”:=”就表示直接赋值,赋予当前位置的值
“?=”说明:
“?=”表示如果该变量没有被赋值,则赋予等号后的值。
VIR := old_value
VIR ?= new_value
这种情况下,VIR的值就是old_value
+=说明
“+=”和平时写代码的理解是一样的,表示将等号后面的值添加到前面的变量上
$@表示生成目标
比如
boot.o : boot.c
gcc -o $@ -c $<
其中 $@表示生成的目标 boot.o
$< 表示生成的依赖文件 boot.c
===================================================
https://blog.csdn.net/weixin_38391755/article/details/80380786
https://www.cnblogs.com/wang_yb/p/3990952.html
https://blog.csdn.net/u012989012/article/details/80572043
https://blog.csdn.net/weixin_38391755/article/details/80380786
https://www.cnblogs.com/wang_yb/p/3990952.html