您的位置:首页 > 其它

Makefile工程管理语法与使用技巧

2017-12-09 17:14 197 查看
  

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

  

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

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

规则:用于说明如何生成目标文件,规则的格式如下:
targets : prerequisites
    command
目标 依赖 命令

特别提供:命令需要使用【TAB】键空格

    目标?依赖?命令?

例如:
led.bin: led.o

    arm-linux-ld -Tled.lds -o led.elf led.o

Makefile中把那些只包含命令,没有任何依

赖的目标称为”伪目标”(phony
targets)

.PHONY : clean\

clean:

    rm -rf  hello main,o func.o

其中.PHONY  的作用是将clean生成为伪目标

最终目标:

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

规则?make后面加某一个规则的目标
2. 如果用户没有指定执行某一条规则,make会默认

执行makefile中的第1条规则,而这条规则中的目标称之

为:最终目标

变量:

使用变量前:
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中,用户除了可以自己定义变量外,还可以使用

存在系统已经定义好的默认变量。
1. $^:代表所有的依赖文件
2, $@:代表目标
3. $<:代表第一个依赖文件

使用前:
led.o : led.S

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

使用后

led.o
: led.S

    arm-linux-gcc
-g -o  $@  -c  $^

通用规则:

    当一个makefile中有许多类似的规则时,如

何将这些规则合并为一条通用规则?

    

例如:

led.o
: led.S

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

key.o
: key.S

    arm-linux-gcc -g –o key.o -c key.S

uart.o
: uart.S

    arm-linux-gcc -g –o uart.o -c uart.S

上面三个规则中目标和依赖只有后缀不一样,那么我们可以用%代替前缀

%.o
: %.S

    arm-linux-gcc
-g –o %.o -c %.S

就代替了上面三个规则,简单实用.

 为了节省时间,有时候我们需要去掉回显,在命令前加一个@符号,就可以去掉该命令的回显功能.例如:

hello: hello.c
    @gcc hello.c –o hello

@:取消回显 (演示)

    

文件名:

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

 
       

    
     make -f 文件名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: