makefile学习笔记
三要素:
目标、依赖、命令
目标:依赖的文件或其他目标
<tab>命令1
<tab>命令2
<tab>命令3
Make+target* ->单独执行某个目标
当创建了目标文件targetb的时候 make命令会先寻找对应的目标文件进行执行且如果目标文件不更新则不会执行
需要使用.PHONY:目标
告诉make脚本该目标为伪目标文件才能继续执行
用Makefile管理编译工程
Makefile的变量
系统变量
自定义变量
自动化变量
自定义变量
= 延迟赋值
当B的时候才赋值所以输出的是456
:=立即赋值
?= 空赋值
当变量没有赋值的时候才可以赋值所以是123
+= 追加赋值在原来的值后面追加新赋值
自动化变量
$< :第一个依赖文件
打印出了第一个依赖文件的名字
$^:全部的依赖文件
$@:目标文件
Mp3:main.o mp3.o 这里mp3是目标文件 main.o 和mp3.o是依赖文件
$@ 表示目标文件 $^ 表示所有的依赖文件
所以可以改写成 $^ -o $@
模式匹配
%匹配任意多个非空字符
类似于shell:*通配符
在Makfile里面所有的.o文件都是由对应的.c文件来进行编译的
条件分支
Ifeq (var1,var2)
......
else
......
endif
Ifneq (var1,var2)
......
else
......
endif
关键词后面要有空格
解决Makefilearm-linux-gcc :command not found
注意在编译的时候需要删除由gcc编译的.o文件让arm-gcc重新编译不然会报错