学习笔记-makefile简单用法
目标:我们要去make 什么? make xxx 中的xxx,就是我们最终要生成的东西。
依赖:用来生成目录的原材料
命令:加工方法,
make xxx的过程,就是使用使命令将依赖加工成目标的过程。
1、% 是Makefile 中的通配符,代表一个或几个字母 。%.o 表示所有以.o结尾的文件
2、自动推导是Makefile的规则,
3、Makefile 中定义和使用变量和shell 脚本中的非常相似。没有变量类型,直接定义使用,引用变量时用$var
4、伪目标(.PHONY)
这个目标本身不代表一个文件,执行这个目标不是为了得到某个文件或东西,而是单纯为了执行这个目标下面的命令。
5、Makefile合法的文件名:Makefile 和 makefile
6、引用其它的Makefile的文件,用include ,makefile的文件一般是.mk 后缀的。
7、注释使用#,和shell 一样
8、命令前面 加@用来静默执行
如果不想看到命令本身,只看结果,则可以用@来进行静默执行。
9、
Makefile 并不要求赋值两边一定要用空格或者无空格,这个比shell要宽松得多。
(1)= 最简单的赋值,被解释时取决于最后一次的赋过的值,得往后看最后赋过值是多少。
(2):= 一般也是赋值,就地直接解释,只需要往前看即可。
(3)?= 如果变量前面没有被定义(赋值)过则执行这条赋值,如果定义(赋值)过,则本行忽略
(4)+= 用来给一个已经赋值的变量接续赋值,把这次的值加到原值的后面(类似开strcat),原值和接续的值之间会有一个空格隔开。
10、Makefile 环境变量
(1)Makefile 中用export 声明的就是环境变量,一般情况下要求环境变量名用大写,普通变量名用小写。
(2)环境变量类似于整个工程中所有Makefile之间可以共享的全局变量,而普通变量只是当前本Makefile中使用的局部变量
所以要注意:定义了一个环境变量可能会影响到工程中别的Makefile文件。
(3)Makefile中可能有一些环境变量可能是Makefile本身自己定义的内部的环境变量,或者是当前的执行环境提供的环境变量
(如我们在make执行时给Makefile传参,就相当于给当前的Makefile传了一个环境变量。)
11、Makefile中使用通配符
(1)* 若干个任意字符
(2)? 1个任意字符
(3)[ ] 将[ ]中的字符依次去和外面的结合匹配
(4)% 和*号很相似,但%一般只用于规则描述中,又叫规则通配符
12、自动变量
有些情况下,文件集中非常多,描述很麻烦,所以Makefile用一些特殊的符号来替代某种条件的文件集,这就形成了自动变量。
含义:预定义的特殊意义的符号,类似于C语言编译器中预制的那些宏 __FILE__ 一样
常见的自动变量:
(1)$@ 规则的目标文件名
(2)$< 规则的依赖文件名
(3)$^ 依赖的文件集合