• [arm学习]makefile学习总结


    makefile不仅仅是一个命令的集合体,其中有一些规则是需要理解掌握的。

    首先,了解makefile的规则:

    //-----------格式----------

    目标 : 依赖1,依赖2

    (TAP键)命令

    //-------------------------

    1、目标,就是我们想生成的文件。

    2、依赖往往是我们已经有的文件,是生成目标的必要条件。

    3、命令就是利用依赖来产生目标。

    命令不是任何情况都可以执行的,它是有条件的:

    1、目标不存在 or  2、依赖已更新(首先依赖是存在的)。

    牛刀小试:

    1、编译和链接放一块了:

    hello: hello.c  a.c

    gcc -o hello  hello.c  a.c

    hello是目标,命令执行后会被生成。hello可通过“.hello”执行。

    gcc 可以理解为是linux中的一个软件,而 -o 就是软件中的一个按键(选项),hello.c  a.c就是已经添加的模块文件。

    这就是命令,就像是你在windows里打开一个软件,添加文件,然后按下编译按钮。命令就是这么一回事。

    2、编译和链接分开:

    过程分析:首先目标hello 依赖于 hello.o 和 a.o

    结果这两个依赖不存在,那么向下找目标。

    发现目标hello.o,依赖于hello.c(这个是存在的)。满足目标不存在

    那么执行命令 gcc -o hello -c hello.c//表示编译hello.c输出hello.o但不链接。

    下边的同理。。。。。。。

    现在两个.o文件都有了,那么这条命令可以执行了:

    gcc -o hello  hello.o a.o//链接这两个文件,输出hello可执行文件。

    这样的好处是:

    利用规则:1、目标不存在。or 2、依赖已更新(首先依赖是存在的)。

    可以不编译,没有修改的文件,从而节省编译时间。

    最后,还可以简写:

    分析下:

    $@ 表示的是目标(的集合);

    $^ 表示的是依赖(的集合);

    %.o 表示所有的.o文件

    %.c 表示所有的.c文件

    $<  表示(目标:后面列表里)第一个依赖!

    这里提一点:

    1、当我们执行make的时候,我们的目的是,参数该文件的第一个目标,就是hello。所以clean 下的命令并不会执行。

    2、clean是一个虚拟的目标,并没有依赖项。我们可以通过 make clean 这个命令去执行它下边这个命令(清楚掉所有的.o文件)

    再来看一个复杂一点的:

    第一行是什么,意思目前我也不知道,可以把它看成是一个函数,makefile中调用函数的方式就是”$( ) ”

    arm-linux-gcc 就是linux的中的另一个软件了——交叉编译器。

    何为,交叉编译?就是在一个平台编译,生成一个可以在另一个平台运行的文件。

    具体看看这句:

    arm-linux-gcc  $(CFLAGS)  -c  -o  crt0.o  crt0.S

    看着“-c  -o  crt0.o  crt0.S”这条命令的顺序,你是否感觉奇怪?

    如果,你把-c  -o 理解成两个按键,感觉可能好很多。

    之所以这么随意的顺序,去写,是因为这些选项往往有一个特性,就是忽略掉后面自己不需要的文件。

    这段makefile以后还会具体分析,今天就到这里~~

                                                                                        2014-11-25

                                                                                         宋桓公

  • 相关阅读:
    监控神器-普罗米修斯Prometheus的安装
    Prometheus+Grafana搭建监控系统
    Win10安装PyQt5与Qt Designer
    分区 partition
    16-成绩3
    15-成绩2
    14-票价问题
    13-union 、distinc、 join
    集群无法启动的问题?
    12-order by和group by 原理和优化 sort by 倒叙
  • 原文地址:https://www.cnblogs.com/douzi2/p/4934227.html
Copyright © 2020-2023  润新知