makefile工程管理
个人理解吧,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工程管理的更多相关文章
- Makefile 工程管理
Makefile 工程管理 Makefile 规则 --变量 在Makefile中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量 $^:代表所有的依赖文件 $@:代表目标 $&l ...
- ARM裸机开发之交叉工具链和MakeFile工程管理
一.交叉工具链 嵌入式Linux开发采用交叉开发,简单来说就是在宿主机(PC机)上面编译出能够在其他硬件平台上面运行的程序.在这个过程中,需要用到许多的交叉工具,这些交叉工具的集合就叫做交叉工具链.下 ...
- Makefile工程管理器及万能模板
Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员.在 Linux(unix )环境下使用GNU 的m ...
- 1-3 编程基础 makefile工程管理
GNU make Linux程序员必须学会使用GNU make来构建和管理自己的软件工程.GNU的make能够使整个工程的编译.链接只需要一个命令就可以完成. makefile make在执行时,需要 ...
- 6、GNU makefile工程管理学习的一个例子
在之前我们已经学习了一个文件的编译过程,但是做过项目的都知道,一个工程中的源文件不计其数,其按类型.功能.模块会分别放在若干个目录中,而这些文件如何编译就需要有一个编译规则,虽然现在很多大型的项目都是 ...
- linux应用程序设计--Makefile工程管理
Makefile文件描述了整个工程的编译.链接等规则.包括:工程中哪些源文件需要编译以及如何编译:需要创建哪些库文件以及如何创建这些库文件.如何产生最终的可执行文件. Makefile相关术语 1.规 ...
- 1.3 Makefile 工程管理
1. 为什么得用Makefile 单步命令生成led.bin [root@cfm880 lesson1]# cd .. [root@cfm880 Part1]# mkdir lesson3 [root ...
- [国嵌笔记][017][Makefile工程管理]
Makefile的用途 1.make能够使整个程序的编译.链接只需一个命令就可以完成 2.make的工作主要依赖于Makefile的文件.Makefile文件描述了整个程序的编译.链接等规则,使之自动 ...
- 学习总结:工程管理与makefile
工程管理与makefile 一.为什么需要makefile和make 一个工程中的源文件可能很多,按照类型.功能.模块分别放在若干个目录中,为了有效地管理软件工程,更高效地编译整个工程,需要用到mak ...
随机推荐
- Jenkins+maven+git+sonar 系统持续集成&代码单測管理
Jenkins+maven+git+sonar 系统持续集成&代码单測管理 Jenkins的安装 Jenkins是基于Java开发的一种持续集成工具,用于监控持续反复的工作.功能包含: 1.持 ...
- 获取Android自己写好了的apk以及反编译
今天,我们先说一下,获取Android自带的apk以及反编译它们来学习Android工程师是怎样写的,今天我们就以拿到Android自带的短信管理器的apk为例子 你可能有疑问,为什么要那么麻烦,从系 ...
- yii console.php 报错 Property "CConsoleApplication.theme" is not defined.
默认配置的话,是不会出现这个错误的,应该是有人为修改了 yiic.php 这个文件,本来是 $config 载入的应该是 console.php ,人为修改后载入了 main.php 这个配置文件了 ...
- 通过源码安装最新版Git
下载源码 到Git的Github主页上下载最新的源码到本地,解压并进入目录. 编译安装 cd 你的git源码目录 autoconf ./configure make 第一个报错 报错内容: usr/b ...
- 线段树---HDU1754 I hate it
这个题也是线段树的基础题,有了上一个题的基础,在做这个题就显得比较轻松了,大体都是一样的,那个是求和,这个改成求最大值,基本上思路差不多,下面是代码的实现 #include <cstdio> ...
- tomcat结合nginx使用 基础教程
相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...
- HTML5触摸屏touch事件使用实例1
1.源码: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> ...
- 《CSS网站布局实录》学习笔记(一)
今天开始,认真学习前端技术,哈哈哈~~~加油~~~ 推荐这本<CSS网站布局实录>(第2版)给初级入门选手,虽然这本书年代有点久远,不过很经典. 注明一下:这里讲述的CSS均为CSS 2. ...
- Memcached 搭建过程
原文链接:http://www.open-open.com/lib/view/open1324368235733.html 安装 memcached 服务端 yum -y install libeve ...
- StrokeStart与StrokeEnd动画
通过修改CAShapeLayer的StrokeStart与StrokeEnd的值来实现画图动画 效果图: 代码部分: #import "ViewController.h" @int ...