个人理解吧,makefile就是写一个指定格式的文件,将一系列的编译、链接、转换等操作打包在一起,方便以后一键生成可执行的二进制文件而产生的。下面记录一下这种文件的写法,方便以后忘了来查询。
  makefile文件一般格式(又叫规则):

  目标文件名:依赖文件名
  命令

  就是这样,注意第二行,命令前面的空白不是用空格键敲出来的,而是用一个Tab键直接搞定。其中,目标文件只能有一个,而依赖文件可以有一个,可以有多个,甚至一个也没有。没有依赖文件的目标称为伪目标,通常是为了给某个操作命名方便以后直接使用。

  

  如图所示,第一条规则中,all为目标文件,led.o为依赖文件,下面的两行即为为了生成目标文件而使用依赖文件执行的某种命令。第二条规则同理。根据 上述可知,第三条规则中的目标是一个伪目标,一般的makefile文件中都会用.PHONY来对伪目标进行声明。该伪目标的作用就是给后面的命令起个名 字,方便以后直接make调用。写完之后保存退出就可以使用啦!这时候问题来了,这个makefile文件应该如何使用?如果当初编辑这个文件时给它起的 名字是makefile或者Makefile,那么就可以直接使用,因为系统认识。比如make all、make led.o、make clean,都可以执行相对应的规则。或者只打make,这时候执行的就是makefile这个文件中的第一条规则,下面举图说明。

  

  一个make命令有了后续的三个操作。这时候问题来了:我执行的第一条规则为什么首先会出现第二条规则的命令?仔细看过就能知道,第一条规则的依赖文件是 led.o,而这个时候没有执行第二条规则,所以系统中并没有led.o这个文件,要执行第一条规则,就必须先执行第二条规则来产生第一条规则的依赖文件 led.o。所以有了图中的那三条命令。那么编写makefile是能不能起别的名字呢?当然可以,只是这样写出来的文件系统不认识,不过只需要加一个选 项就可以搞定。 

  

  如图所示,将makefile文件重命名为wsk,这时候系统不认识了,怎么来make呢?只需要在文件名前加上-f选项就OK。如:“make    -f    wsk    Clean”,即可产生wsk文件中的Clean目标文件。So easy~~!
  下面说说编写makefile文件过程中的一些技巧:
  

一、使用变量

  如图所示,编写文件的过程中,func1.o,func2.o两个依赖文件多次出现,那么每次写一条规则的时候都列举这些相同的依赖文件未免有些繁琐。我 们可以将这些文件定义为一个变量,以后需要调用的时候直接调用变量就OK。linux中变量是没有类型的,直接给它起个名字就可以拿来用了。像例子中的, 将func1.o,func2.o赋值给变量obj,注意不同的文件之间用空格分开,而且等号两边不能够有空格,以后用到这些文件直接用$(obj)来调用就OK了,方便美观。在 linux中,用户不仅可以用自己定义的变量,也可以用系统定义的变量,系统默认的变量如下所示

二、去掉回显

  通常make的时候会将所执行的命令打印出来,打印也是需要时间的,执行的命令少了还好说,如果命令多的话就会浪费很多的时间,所以适当的时候有必要把回显去掉。很简单,只要在不想看见的命令前面加上@就OK,像这样

  不过每一行都这样加好像也是挺麻烦的一件事。。。

三、通用规则

  如下图所示

  

  像这种命令完全一样,目标和以来又有某种规律时,我们就可以用一条通用规则代替

  

  即将不同的部分用%号来代替,这样就能将三条规则简化成一条了。    

makefile工程管理的更多相关文章

  1. Makefile 工程管理

    Makefile 工程管理 Makefile 规则 --变量 在Makefile中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量 $^:代表所有的依赖文件 $@:代表目标 $&l ...

  2. ARM裸机开发之交叉工具链和MakeFile工程管理

    一.交叉工具链 嵌入式Linux开发采用交叉开发,简单来说就是在宿主机(PC机)上面编译出能够在其他硬件平台上面运行的程序.在这个过程中,需要用到许多的交叉工具,这些交叉工具的集合就叫做交叉工具链.下 ...

  3. Makefile工程管理器及万能模板

    ​ Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员.在 Linux(unix )环境下使用GNU 的m ...

  4. 1-3 编程基础 makefile工程管理

    GNU make Linux程序员必须学会使用GNU make来构建和管理自己的软件工程.GNU的make能够使整个工程的编译.链接只需要一个命令就可以完成. makefile make在执行时,需要 ...

  5. 6、GNU makefile工程管理学习的一个例子

    在之前我们已经学习了一个文件的编译过程,但是做过项目的都知道,一个工程中的源文件不计其数,其按类型.功能.模块会分别放在若干个目录中,而这些文件如何编译就需要有一个编译规则,虽然现在很多大型的项目都是 ...

  6. linux应用程序设计--Makefile工程管理

    Makefile文件描述了整个工程的编译.链接等规则.包括:工程中哪些源文件需要编译以及如何编译:需要创建哪些库文件以及如何创建这些库文件.如何产生最终的可执行文件. Makefile相关术语 1.规 ...

  7. 1.3 Makefile 工程管理

    1. 为什么得用Makefile 单步命令生成led.bin [root@cfm880 lesson1]# cd .. [root@cfm880 Part1]# mkdir lesson3 [root ...

  8. [国嵌笔记][017][Makefile工程管理]

    Makefile的用途 1.make能够使整个程序的编译.链接只需一个命令就可以完成 2.make的工作主要依赖于Makefile的文件.Makefile文件描述了整个程序的编译.链接等规则,使之自动 ...

  9. 学习总结:工程管理与makefile

    工程管理与makefile 一.为什么需要makefile和make 一个工程中的源文件可能很多,按照类型.功能.模块分别放在若干个目录中,为了有效地管理软件工程,更高效地编译整个工程,需要用到mak ...

随机推荐

  1. java web mvc思想介绍

    1.首先简介一下什么是MVC思想. 在百度百科里面对MVC的说明,MVC全名是Model View Controller.是模型(model)-视图(view)-控制器(controller)的缩写. ...

  2. MVC jsp+servlet+javabean 连接Mysql数据库測试demo

    本文介绍的是怎样使用MVC架构去实现jsp+servlet+javabean连接数据库 首先我们应该了解什么是MVC: MVC包含三个部分 : ①View:由各种JSP页面组成. ②Controlle ...

  3. [转] thrift的使用介绍

    http://gemantic.iteye.com/blog/1199214 一.About  thrift   二.什么是thrift,怎么工作? 三.Thrift  IDL 四.Thrift   ...

  4. Configuring Network Configuration-RHEL7

    1.查看网络状态systemctl status NetworkManager You can use the  systemctl status NetworkManager  command to ...

  5. Counting Lines, Words, and Characters with wc

      Counting Lines, Words, and Characters with wc   When working with text files, you sometimes get a ...

  6. Apache调优

    1.调整文件描述符大小,默认Linux系统的文件描述符是1024,对于squid等一些服务来说                在高负载的情况下这些文件描述符是远远不够的,所以在部署该类服务器时修改文件 ...

  7. CSS元素分类及区别

    元素是文档结构的基础,在CSS中,每个元素生成了一个包含了元素内容的框(box,也译为“盒子”).但是不同的元素显示的方式会有所不同,例如<div>和<span>就不同,而&l ...

  8. oracle的一知半解

    这里只讲第一次开发运用oracle数据库的.net程序遇到问题: 1.程序与oracle数据库在同一台的服务器,貌似设置好连接字符串就可以直接访问( 需要主要的问题: 字符串格式:Data Sourc ...

  9. 总结一下apply和call的异同点

    call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就 ...

  10. 流Stream个人学习理解

    1.Stream类 命名空间:System.IO 程序集:mscorlib 流是对字节序列的抽象,提供字节序列的一般视图. 流的操作包括三个方面: 1.读取(Read):将流数据传入到数据结构 2.写 ...