个人理解吧,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. IOS开发之Post 方式获取服务器数据

    //1.创建post方式的 参数字符串url +(NSString *)createPostURL:(NSMutableDictionary *)params { NSString *postStri ...

  2. SKPhysicsJointSpring类

    继承自 NSObject 符合 NSCoding(SKPhysicsJoint)NSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit. ...

  3. SKLabelNode类

    继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架  /System/L ...

  4. Java基础知识强化91:DateFormat类之DateFormat实现日期和字符串的相互转换

    1. DateFormat类概述: DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间. 是抽象类,所以使用其子类SimpleDateFormat 2.  ...

  5. 配置NTP时间服务器

    一.安装ntp软件 1.检查是否安装了ntp相关包. rpm -qa | grep ntp 2.安装ntp软件. yum -y install ntp 二.参数讲解 ignore  :关闭所有的 NT ...

  6. 【网络流#6】POJ 3041 Asteroids 二分图最大匹配 - 《挑战程序设计竞赛》例题

    学习网络流中ing...作为初学者练习是不可少的~~~构图方法因为书上很详细了,所以就简单说一说 把光束作为图的顶点,小行星当做连接顶点的边,建图,由于 最小顶点覆盖 等于 二分图最大匹配 ,因此求二 ...

  7. Redis,MemCached,MongoDB 概述

    调研项目主要有Redis. MemCached. MongoDB,以及Amazon的DynamoDB Redis 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key- ...

  8. [转]MySQL数据库的热备份

    一.系统环境描述:      1.两台数据库服务器,A和B:      2.当前A正在使用,将作为主服务器,B为准备用来做备用数据库服务器:      3.要进行热备份的数据库中含有类型为MyISAM ...

  9. css3表格隔行变色和表格选中变颜色代码

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

  10. div+css的叫法是不正确的

    为什么国人将这种布局标准页面的方法叫做DIV+CSS? 因为第一个将这种技术引进中国的人,对这门技术理解不够透彻,单纯从代码上辨别过去的页面布局方法和现在流行的页面布局方法,认为过去布局页面用的是Ta ...