ARM编程工具篇——Makefile

ARM 70浏览

        在Linux中使用make命令来编译程序,特别是大程序;而make命令所执行的动作依赖于Makefile文件。

为什么需要Makefile

1、Makefile用途

      使用GNU Make工具来管理程序是每个Linux工程师必修掌握的技能。make能够使整个程序的编译、链接只需一个命令(make)就可以完成。

      Make的工作主要依赖于一个叫Makefile的文件。Makefile文件描述了整个程序的编译,连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译,如何最后产生我们想要得可执行文件。

2、Makefile构成

(1)规则

       Makefile中最重要的组成部分是”规则“  

       规则:用于说明如何生成目标文件,规则的格式如下:

目标(targets)....:依赖(prerequisite)....
<tab>命令(command)

目标  依赖  命令

示例:

led.bin:led.o             #目标led.bin依赖文件led.o
      arm-linux-ld -Tled.lds -o led.elf  led.o    #命令

特别提醒:命令需要使用【TAB】键空格
伪目标

Makefile中把那些只包含命令,没有任何依赖的目标称为“伪目标”(phony targets)。

.PHONY : clean
clean :
     rm -f hello main.o func.o

".PHONY"将“clean”目标声明为伪目标

最终目标

(1)当一个makefile中有多条规则时,如何单独执行某条规则?

make + 要执行的目标

(2)如果用户没有指定执行某一条规则,make会默认执行Makefile中的第1条规则,而这条规则中的目标称之为:最终目标

  (2)变量

使用变量前:

app1:app1.o func1.o func2.o
      gcc app1.o func1.o func2.o -o app1
app2:app2.o func1.o func2.o
      gcc app2.o func1.o func2.o -o app2

使用变量后:

obj=func1.o func2.o
app1:app1.o $(obj)
    gcc app1.o $(obj) -o app1
app2:app2.o $(obj)
    gcc app2.o $(obj) -o app2

在Makefile中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量。

$^:代表所有的依赖文件

$@:代表目标

$<:代表第一个依赖文件

使用前:

led.o : led.S
      arm-linux-gcc -g -o led.o -c led.S

使用后:

led.o : led.S
      arm-linux-gcc -g -o $@ -c $^

3、Makefile使用技巧

(1)去回显

hello : hello.c
      @gcc hello.c -o hello

在命令前加上@取消回显

(2)文件名

make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以是使用如下方法指定:make -f  文件名

Makefile文件使用技巧有很多,这里只是简单的一小部分。如果你想深入学习,这里上传两个参考文档。

GUN make中文手册http://download.csdn.net/detail/liaoxu02/8851835

跟我一起学习Makefilehttp://download.csdn.net/detail/liaoxu02/8851845