make 工具如 GNU make、System V make 和 Berkeley make 是用来组织应用程序编译过程的基本工具,但是每个 make 工具之间又有所不同。不同的make工具的makefile 的结构大部分相同,在很多编译过程中,makefile 自己完全是由其他软件生成的;如autoconf/automake 程序就用来开发编译程序。有时可能会要求我们直接编写 makefile( 其实是改写)。目前我工作平台是Linux,我的基本需求是能够读懂GUN Makefile,并且能够根据自己的设计的需求改写Makefile。什么是make? Linux 自带的文档解释的非常清楚:

The purpose of the make utility is to determine automatically which pieces of a large program need to be recompiled, and issue the commands to recompile them. In fact, make is not limited to programs. You can use it to describe any task where some files must be updated automatically from others whenever the others change.

1 Makefile 里有什么?

Makefile里主要包含了五个东西:显示规则、隐晦规则、变量定义、文件指示和注释。在Makefile中的命令,必须要以[Tab] 键开始。

2 make的工作方式

GUN的make 工作时执行步骤如下:

(1) 读入所有的Makefile;

(2) 读入被include 的其他Makefile;

(3) 初始化文件中的变量;

(4) 推导隐晦规则,并分析所有规则;

(5) 为所有的目标文件创建依赖关系链;

(6) 根据依赖关系,决定哪些目标要重新生成;

(7) 执行生成命令。

3 Makefile的规则

Makefile的规则包含两个部分,一个是依赖关系,一个是生成目标的方法。在Makefile中规则的顺序是很重要的,Makefile中只有一个最终目标,一般第一条规则中的目标将被确立为最终目标。

依赖性规则的格式

target: dependencies

instructions

4 通用生成目标

通用生成目标应该表示什么,以及它们该如何命名已经有了一组良好的约定。遵从这些会让自己的makefile 更容易理解和使用。

all

生成工程中所有可以执行者。它通常是第一个生成目标,因此它往往是开发者不带参数键入make就能执行的那一个。

test

运行程序的自动测试套件。

clean

删除make all 时产生的所有文件。

dist

dist是distribution的缩写,制作源文件档案,它可以作为在另一台机器上重新编译的单元。

install

在系统目录中安装项目工程的可执行文件和文档,以让普通用户访问。

uninstall

删除由make install 安装在系统目录中的所有文件。

问题:

1 在开发ASIC过程都可以用Makefile 和shell脚本自动化完成任务,二者有什么区别?

2 make 工具适合于EDA工具吗?比如VCS仿真和Vivado综合?

参考文献:

[1] 陈皓. 跟我一起写Makefile.

[2] 徐海兵. GUN make中文手册.

[3] 调试 make. http://www.ibm.com/developerworks/cn/linux/l-debugmake.html

[4] Eric. Raymond. UNIX编程艺术. 电子工业出版社. 2013,6.

Makefile介绍的更多相关文章

  1. 跟我一起写Makefile:MakeFile介绍

    makefile 介绍 make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程序. 首先,我们用一个示例来说明makefile的书写规则.以便给大家一个感性认识.这 ...

  2. (转)Makefile介绍

    2. Makefile介绍 make命令执行时,需要一个Makefile文件,以告诉make命令需要怎么样的去编译和链接程序. 首先,我们用一个示例来说明Makefile的书写规则.以便给大家一个感性 ...

  3. [转] Makefile 基础 (1) —— Makefile 介绍

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

  4. Makefile 介绍

    makefile:是告诉编译器(交叉工具链)如何去编译.链接一个工程的规则.   一.概述 什 么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为 ...

  5. 第一篇 make与makefile介绍

    我们在Linux系统中学习C语言或者C++语言时,大多数时候只是用gcc命令或者g++命令在命令行进行简单的编译.链接即可得到最终的可执行文件,进一步即可验证所写C/C++语言的正确性.但是,在大型工 ...

  6. GNU Make chapter 2 —— Makefile 介绍

    Makefile是由一系列的rule规则组成,这些rule都遵循以下形式: target ... : prerequisites ... command ... ... target(目标) 一般来说 ...

  7. CFLAGS/CPPFLAGS/CXXFLAGS in Makefile介绍

    先来看一张关于Makefile中的常见预定义变量. CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项.这两个变量实际上涵盖了编译和汇编两个步骤.大多数程序和库 ...

  8. makefile介绍1.0

    1.gcc参数 -o指定生成文件名 -c只编译不链接 2.makefile标准格式 CC=gcc #编译器变量,#代表注释 SRCS=main.cpp\#源文件变量 a.cpp\ b.cpp\ c.c ...

  9. GNU autotools自动生成Makefile 介绍

    一.目的 使用autotools工具来帮助我们自动地生成符合自由软件惯例的makefile(这样就可以像常见的GNU程序一样,只要使用"./configure", "ma ...

  10. make和makefile介绍

    <strong>先附上一个比较简单的,测试代码用的Makefile</strong> </pre><pre code_snippet_id="463 ...

随机推荐

  1. chrome——关于chrome浏览器的奇葩问题

    前言 说下自己遇到的关于chrome的奇葩问题~ 问题 目前就一个,还是刚才才遇到的~ 消息通知 客户的chrome浏览器死活没有通知,检查后发现通知权限未开启, 通知权限开启后,还是没有提示,最后排 ...

  2. javascript 树形菜单

    1. [代码][JavaScript]代码     var ME={ini:{i:true,d:{},d1:{},h:0,h1:0,h2:0},html:function(da,f){var s='& ...

  3. poj 1195 Mobile phones 解题报告

    题目链接:http://poj.org/problem?id=1195 题目意思:有一部 mobie phone 基站,它的面积被分成一个个小正方形(1 * 1 的大小),所有的小正方形的面积构成了一 ...

  4. Oracle中如何用SQL检测字段是否包括中文字符

    用Oracle的编码转换的函数Convert实现,测试后可行. SQL> select *  2    from (select 'abcd' c1 from dual  3          ...

  5. 关于python代码的性能

    在python中性能测试是一个很难应付的任务,因为它在反复地优化,也许版本和版本之间差别很大.python中的一个主要的原则是,首先为了简单和可读性去编写代码,在程序运行后,并证明了确实有必要考虑性能 ...

  6. [51nod 1129] 字符串最大值(kmp)

    传送门 题目大意 求一个字符串的前 缀出现次数乘以长度的最大值. 题解 暴力枚举每一个前缀求出现次数再乘以常数取最大 这样做会T几个点 看了老师的做法是任意前缀出现的次数,它的next也会出现这些次数 ...

  7. 国外、国内各大OJ

    下面是几个比较大的在线提交系统(Online Judge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有Pascal/C/C++/Java)写好源代码提交即可,会实时返 回信息告 ...

  8. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时7

    课时7 线性分类器损失函数与最优化(下) 我们为什么要最大化对数概率而非直接最大化概率? 你在做逻辑斯蒂回归时,如果你只是想要最大化概率,那你使用log是无意义的.因为log函数是单调函数,最大化概率 ...

  9. Spring-SpringMVC父子容器&AOP使用总结

    此文已由作者尧飘然授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Spring&SpringMVC Spring&SpringMVC作为bean管理容器和MV ...

  10. Codeforces 550B 【暴力】

    题意: 有n个数字, 要求在这n个数中选出至少两个数字, 使得它们的和在L,R之间,并且最大的与最小的差值要不小于x 思路: 撒比了啊... 根据状态的话一共也就是2^15-直接暴力,二进制的小魅力还 ...