1、Makefiel的作用及意义:
Makefiel主要用于管理C语言的工程文件,如同EDA一样,这不过这里是通过Makefile这个文件来管理这个歌工程文件的。相对于传统EDA而言更见灵活也可以随时对文件进行必要的处理。这里主要用与uboot和Liunx
2、Makefile的用法:
1)Makefile的文件名一般是Makefile或makefile
2)Makefile主要由目标,依赖,命令这几部分组成的。
·目标:目标就是我们要去make xxx,这个xxx就是我们最终要生成的东西。如:对C文件的make会生成目标文件,然后再给我们去执行。
·依赖:依赖就是要生成这个文件所需的原材料。就像是.h文件对于.c文件一样重要。
·命令:命令就是加工方法。我们可以通过Makefile来选择将我们写的C程序如何生成我们想要的如.bin .o 或 .s 文件。
3)伪目标(.PHONY):
·伪目标的意思是这个目标本身不代表一个文件,执行这个目标不是为了得到某个文件或东西,而是单纯的为了执行这个目标下面的命令。
·伪目标一般没有依赖,因为伪目标就是为了执行目标下面的命令。而没有依赖实际上就是无条件执行下面的命令。
·伪目标可以直接写,而不用加说明。但是,有时为了明确声明这个目标是伪目标,会再他的前面加上.PHONY来声明它是为目标。
4)环境变量:
·makefile中用export导出的就是环境变量。一般情况下,环境变量要大写,普通变量要小写。
·环境变量和普通变量是不同的。环境变量在整个Makefile中都具有作用(即使是引用了其他的Makefile),而普通变量只有在当前的Makefile中起作用。可以将环境变量理解为C语言中的全局变量,而普通变量理解为C语言中的局部变量。因此,定义全局变量的时候要小心了。
·Makefile中的环境变量可以是在写Makefile时在文件内定义的,也可以是我们在执行的时候传递进去的。例如:make CC=liunx-arm-gcc,在这里,CC是makefile中定义的一个环境变量,而后面的linux-arm-gcc则是我们现场传递进去的一个值,而这个现场传递进去的值可以直接覆盖内部CC原本的值。
5)自动变量:
·有时候Makefile里面的变量名字太多了,而我们为了方便起见,都统一规定了一个名字,用它来代替符合某种条件的变量的文件集。Makefile其实可以不用自动变量的,但是,为了方便起见还是用了比较好。
·自动变量其实就是预定义了特殊意义的符号而已。
3、Makefile语法规则: