个人理解吧,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. C primer plus 读书笔记第五章

    本章的标题是运算符,表达式和语句.主要研究如何处理数据. 示例代码展示了一个使用简单的while循环的代码,难度不大. 下面简单介绍本章的基本概念. 1.基本运算符. 基本运算符有:赋值运算符(C语言 ...

  2. XML自己定义检查器语法+约束(1)

    每次使用它检查xml文件时,仅仅需改动xmldoc.load("xml文件名称");中的文件名称,然后将该文件放在浏览器中执行就可以. 依据浏览器弹出的对话框进行推断自己写的xml ...

  3. Java线程的相关方法

    ~ start()  启动线程方法 ~ run()  调用start()方法时,真正执行的就是该方法的方法体 ~ sleep()  让当前线程睡眠,睡眠到期自动苏醒,并进入可运行状态,而不是运行状态 ...

  4. 各版本IIS安装方法

      各版本IIS安装方法 Windows 2000 V5.0 将操作系统安装光盘放入光驱,打开“控制面板”→“添加或删除程序”→“添加/删除 Windows 组件”,勾选“Internet信息服务(I ...

  5. Ajax跨域请求中的Cookie问题(默认不带cookie等凭证)

    1.原生Ajax请求方式,设置跨域请求附带详细参数 var xhr = new XMLHttpRequest(); xhr.open("POST", "http://xx ...

  6. C#中数据源绑定DataSource以及相关控件(DataGridView)的使用总结

    我们在编程过程中,会涉及到表格数据的显示,存储等,就可能涉及到DataGridView,DataSource, DataTable等概念. 下面我就我自己模糊的一些知识点串讲以下: 1)首先我要讲的是 ...

  7. hdu 2480 贪心+简单并查集

    Steal the Treasure Time Limit: 10000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  8. 2013中国大数据技术大会——BDTC2013

    阿里飞天平台总架构师唐洪分享了飞天开放平台. 飞天平台特点:同时支持在线和离线应用:安全控制:分布式部署,监控和诊断:无单点故障,可用性99.9%:数据3副本,数据可靠性“10个9”. 阿里飞天平台总 ...

  9. Nginx并发访问优化

    Nginx反向代理并发能力的强弱,直接影响到系统的稳定性.安装Nginx过程,默认配置并不涉及到过多的并发参数,作为产品运行,不得不考虑这些因素.Nginx作为产品运行,官方建议部署到Linux64位 ...

  10. JavaScript简易日历

    <!DOCTYPE html PUBLIC "-//W3C//h2D XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...