Makfile的作用就是让编译器能够自动编译我们的代码,他的基本原理如下:
目标:条件
动作
例如:
main.o : main.c
gcc -g -c main.c -o main.o
根据给定的条件执行相应的动作到达需要的目标,这个和现实生活中解决问题的一般思路是一样的。
Makefile的自动变量:
Makefile 有六个自动变量:$@代表目标,$^是第一个条件,$?是所有时间比目标更新的条件,$<是去掉重复部分的所有条件,$+没有去掉重复部分的所有条件,$*是目标的名称,就是没有后缀的目标,以前对这几个变量总是搞不清楚,但是看了赵鑫磊著的《Linux就是这个范儿》之后就完全理解了,这本书里面的Linux Shell和Makefile的相关知识写得很好。
Makefile的函数定义和调用
函数定义:
define func
echo "func be called"
echo "param $1 $2"
endef
函数调用:
$(call func,a,b) 输出如下
func be called
param a b
Makefile命令修饰符
@,-,+的用处,例如
@echo "some message" 意思是这个命令执行不输出到stdout,如果这个命令有创建中间文件(.o文件)也不会创建;
-这个表示执行这个命令即使遇到错误也不要停止,例如:
-include(sub-makefile.mk) 等效sinclude
+符号用于调试,被它修改的目标、命令或者函数等只会输出执行的信息到stdout,而不会实际执行这个命令。