zoukankan      html  css  js  c++  java
  • 017Makefile工程管理

    1、为什么需要Makefile?

      利用Makefile和make的合作,可以把很多很多的工作合并成一个非常简单的命令:make;

      make能够使整个程序的编译、链接只需要一个命令(make)就可以完成;

      

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

    2、Makefile构成规则

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

      target : prerequisites

        command

      目标 : 依赖

        命令

      特别注意:命令需要使用【TAB】键空格

      

      范例:

      led.elf:led.o

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

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

      .PHONT:clean

      clean:

        rm -f hello main.o func.o

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

    3、Makefile构成—最终目标

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

        make(空格)目标的名字

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

      

    4、Makefile规则—变量

    使用变量前:

    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中,多次出现的组成部分,可以使用变量进行替换;

    Makefile中,变量没有类型,不需要去定义它,直接赋值就可以了;

    变量的名字是可以随便取的;

    obj是变量名,紧接着是赋值号=,左右两边不要有空格,在Makefile中不允许有这样的空格;

    给变量赋值时,直接变量名,赋值号就可以了;

    但是当我们引用这个变量时,要用$(变量名)

    在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 $^

    5、Makefile构成—通用规则

      当一个Makefile中有许多类似的规则时,如何将这些规则合并为一条通用规则?

      %.o : %.S

    使用前:

    led.o : led.S

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

    main.o : main.S

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

    func.o : func.S

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

    特点:命令一样,目标的名字与依赖的名字仅仅是后缀不一样

    就可以写成:

    %.o : %.S

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

    %表示任意的两个相同的名字名字

    6、Makefile使用技巧—去回显

      去回显:节省时间

      回显:执行命令时,会打印出命令

      比如执行make clean,会打印出:rm *.o *.bin *.elf

      方法:在命令前加@符号!

      func.o : func.S

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

    7、Makefile使用技巧—文件名

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

      make -f 文件名

      整体运行时,运行命令:make -f 文件名

      单独执行某条指令时:例如执行make clean,应写为:make -f 文件名 clean

      

      

  • 相关阅读:
    小作业5
    小作业4
    Matplotlib基础
    Numpy学习笔记(下篇)
    Numpy学习笔记(上篇)
    机器学习的经典算法与应用
    opencv学习笔记D01
    Markdown新手入门
    python之生成器yeild
    pyinstaller打包.py程序为.exe操作指南
  • 原文地址:https://www.cnblogs.com/mch0dm1n/p/5509961.html
Copyright © 2011-2022 走看看