• 初识Makefile


     我:

    make不需要编译器?没有arm-linux-make之类的东西? uboot里面也有shell脚本,没有arm-linux-shell之类的东西? 平台通用?

    五号:make只是一个脚本工具.
    gcc与clang才是编译器.
    我们使用脚本,调用编译器.进行编译。

    我对makefile和shell的通俗理解:

    make和shell是基于操作系统的脚本语言,所以其代码跨平台通用,不需要交叉编译。

    我可以把makefile理解为keil这种IDE,去负责编译过程(keil帮我们管理了头文件包含、各文件的依赖关系等事情)。 
    而bash等shell,我的理解是:
    在平台上(shell中可以使用linux命令,这就意味着shell代码可以操作linux系统,
    并且shell也支持逻辑操作等常规计算机语言的功能,
    这就意味着shell可以让linux系统以组合+先后等等的形式来干各种各样的活)自动化操作keil IDE干活。
     
     综上 makefile shell 结合起来,可以更好得指导如何(“如何”这个特征,就意味着存在组合+先后等等的逻辑关系)编译,以及提示编译错误(windows下的IDE编译后肯定都有编译信息,linux下也不例外,只不过这个过程由我们掌控。shell本身能够掌控linux系统,当然也能在帮助makefile如何编译代码这件事情上,根据shell代码来决定输出哪些信息,这些信息,作为编译信息提示给程序员观看。如果不想看任何编译信息,可以加上@前缀进行静默编译) 。

     

    -------------------------------------------------------------------------

    Makefile有三个非常有用的变量。分别是$@,$^,$<, 代表的意义分别是:

    $@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。

    代码片段:

      %.o : %.S

      arm-linux-gcc -o $@ $< -c

    理解:这里$<是 %.S,所以这句makefile的意思就是把所有的S文件编译成目标($@,即%.o,

    因为这里又使用了%通配符,

    所以这句代码的意思是把相对应的S文件经过gcc -c 编译成 相对应的.o文件.

    因为具有相对应的关系,又使用了-o, 最终得到多个不同名字的.o文件)

    ----------------------------------------------------------------------------

          使用.PHONY修饰的目标,是伪目标, 对于伪目标,伪目标一般没有依赖, 统一都会再执行一遍伪目标下面的命令。

    /************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
  • 相关阅读:
    linux的一些记录
    ant的一些记录
    cmd
    关于请求转发、重定向、url重写
    函数声明优先级高于变量赋值
    认识hasLayout——IE浏览器css bug的一大罪恶根源
    undefined与null的区别
    Javascript面向对象编程(三):非构造函数的继承
    Javascript面向对象编程(二):构造函数的继承
    Javascript 面向对象编程(一):封装
  • 原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/10662063.html
Copyright © 2020-2023  润新知