初识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修饰的目标,是伪目标, 对于伪目标,伪目标一般没有依赖, 统一都会再执行一遍伪目标下面的命令。

/************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/10662063.html