1.Makefile的基本概念:
目标:目标顶格写,后面是冒号(冒号后面是依赖)
依赖:依赖是用来产生目标的原材料。
命令:命令前面一定是Tab,不能是顶格,也不能说多个空格。命令就是要生成那个目标需要做的动作。
2.示例代码:
led.bin: start.o
arm-linux-ld -Ttext 0x0 -o led.elf $^ //设置连接地址为0x0,在linux系统中.elf文件是可执行文件
arm-linux-objcopy -O binary led.elf led.bin //把可执行文件变成可烧写文件
arm-linux-objdump -D led.elf > led_elf.dis //把可执行文件反汇编
gcc mkv210_image.c -o mkx210 //编译mkv210_image.c
./mkx210 led.bin 210.bin //用led.bin(USB烧写)生成210.bin(SD烧写),SD烧写要添加开头16字节的校验信息,这是S5PV210芯片特有的,详细信息参考芯片的启动过程。
%.o : %.S
arm-linux-gcc -o $@ $< -c //把.S文件都编译得到.o文件
%.o : %.c
arm-linux-gcc -o $@ $< -c //把.c文件都编译成.o文件(-c是只编译不链接)
clean:
rm *.o *.elf *.bin *.dis mkx210 -f
3.调用方法:
3.1.make:没有指明目标,默认执行第一个目标(led.bin)下的语句。
3.2.make clean:得到clean这个目标,删除指定后缀的文件。
4.Makefile的自动变量
4.1.什么是自动变量
自动变量的含义:Makefile中预定义的特殊意义的符号。就类似于C语言编译器中预制的那些宏__FILE__一样。在有些情况下文件集合中文件非常多,描述的时候很麻烦,所以我们Makefile就用一些特殊的符号来替代符合某种条件的文件集,这就形成了自动变量。
4.2.常见的自动变量
(1)."$@": 规则的目标文件名;
(2)."$<" : 规则的依赖文件名,在规则中表示所有依赖的文件名,在其他地方只表示第一个依赖的文件名;
(3)."$^": 依赖的文件集合;
5.Makefile中使用通配符
(1)* :匹配若干个任意字符;
(2)? : 匹配1个任意字符;
(3)[ ] : 将[ ]中的字符依次去和外面的结合匹配;
(4)% :只在规则中使用,和*的作用一样。