Linux项目自动化构建工具-make/Makefile

前言:

  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
     

可以说会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 

首先要理解Makefile是什么

make是一条命令,makefile是一个文件,两个需要搭配使用。

基本概念 

依赖关系和依赖方法 

依赖关系也就是  a : b a 继承 b 通过 依赖方法 这种方式;

如果 b 是空, 那么就是 a 继承了空     a依赖于空,照样可以进行依赖方式的指令。   

99bc229645c14970b5bfdbcfb8d14386.png

当然,Makefile没有这么简单,我们需要继续完善它;

Make file的完善 

先看这个Makefile

8f7e138e75b344e9bb7908cf900ac7b6.png

  • 为什么make 执行 gcc?
  • make clean 执行 rm ?

首先是因为Makefile是从上向下执行的,类似于栈的结构若遇到无法执行的继承,就会放入栈内,直到遇到一个可以执行的;先执行这个,然后依次从栈里取出之前放入的继承,进行执行;若这个过程中还是有不可以执行的,那就报错;

遇到一个可以执行的后,后面的就是伪目标了,需要自己输入执行;

 4704cb8741764584a7d6c63e052dd036.png

3135776c356f47efb5a89a72d1e2371f.png

 若练习过就可以知道;

为什么make只能执行一次?make clean可以执行多次?

注意下面这个被成为伪目标( .PHONY:),伪目标总是被被执行的;

对应的依赖关系和方法,也就是下面写的,唯一不太一样的就是clean 依赖 空

997e19e6129b4612842ffd47c4590845.png

默认下,Makefile的目标都是 不被执行的。

也就是源代码不更新,就不会重新编译,这样也大大增加了编译的效率。

44a935d0288e41b6bc489371f4ccf33c.png

什么是不被执行:

  1. 默认老代码不做重新编译;

make是怎么知道是不是老代码的呢? 

ea1e475e1f564d8c95e24aa9ba410574.png

modify时间!

  • 只改变内容,Modify改变
  • 只改变属性,change改变
  • 只查看内容。access改变    

但是一般情况下,内容也是属性的一部分,只要内容改变了,属性也会跟着改变;

查看为什么特殊呢?

因为我们编译代码时,百分之八九十都要查看文化;因此查看的时间属性会实时更新,这样态频繁了;后来,修复了这个bug,查看几次,文件才会改变查看时间(具体要根据不同的系统而定。

6a6525f74f7941d48547716b33b18003.png

.PHONY 

因此根据上面的内容可以知道:

.PHONY的作用就是,忽略时间对比的新旧。

 可读性?,更简便的自动化。

先看这个代码和输出

   2ad0923c92894e319d09f02fd6dd7132.png0d9f4d4476c942c7a2fed74eeccbb38a.png

加上符号代替所有内容都手打,是不是更容易,更简洁了;

但是输出我们发现,还是把指令输出出来了,这样可读性不好。那该怎么办?

360d6dea34d0413582ece1d88d0b4a09.png71cbf34d8a564dddb71bd5e4f379783e.png

这样,就极大的增加了可读性,于代码的简洁行;

大多数Makefile也是这样写的

多个文件怎么办? 

总不能 .o .i .s 一个一个打出来吧,那多麻烦;

这里就不得不提一个符号了。

03e23406c5494746a1bff1dded05060d.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值