0.make、makefile是什么?

  makefile定义了一系列的规则,来规定哪些部分先编译,哪些部分后编译,写好makefile以后,只需一个make命令就可以让整个工程完全自动编译,所以简单的说,make&makefile实现了大工程的自动化编译。

1.makefile里是什么?

  看个makefile的简单例子:

 target:main.o test.o
cc -o target main.o teat.o
main.o:main.c x.h
cc -c main.c
test.o:test.c y.h
cc -c test.c
clean:
rm target main.o test.o

  可以看出,makefile中主要由两个部分组成:#1文件依赖关系和#2生成所需命令。其中clean是一个伪目标文件,可用".PHONY:clean"在其前面注明。执行make命令即可编译,执行make clean即可删除所有目标文件。

2.make是如何工作的?

  0)make会在当前目录下找名字为"makefile "或"Makefile"的文件;

  1)若找到makefile文件,接着找第一个目标文件(target),并把它作为最终的目标文件;

  2)若target文件依赖后面的.o文件更新,则执行后面定义的命令会生成target文件;

  3)某个.o文件也会依赖若干个源文件和头文件,它们根据命令生成.o文件。

根据make的依赖性,make会一层层地去找文件的依赖性,直到最终第一个target文件被编译成功。整个过程类似于数据结构中栈的操作。

3.特别注意——makefile中的变量赋值:

  "="是最基本的赋值,makefile会将整个makefile展开后,再决定变量的值。

  ":="是覆盖当前的值,其取决于当前的赋值,而不是最终的赋值(比较好判断)。

  "?="是若没有被赋值过就赋等号后的值。

  "+="是添加等号后的值。

4.可以利用变量减少重复,及利用makefile的自动推导简化makefile,例如:

 #Makefile
objects:main.o test.o
target:$(objects)
cc -o target $(objects)
main.o:x.h #这就用到了自动推导。
test.o:y.h
.PHONY:clean #说明clean是一个伪目标文件。
clean:
rm target $(objects)

  因为这个编译较简单,优势可能不太明显,若要是大工程,变量和自动推导的使用会让makefile有很大的简化。这个部分其实还很丰富,先暂记到这。

5.小注:

0)makefile中命令必须以[tab]键开始。

1)若指定特定的makefile,可用"-f"和"--file"参数。

2)include,被包含的文件会被原封不动的放在当前文件包含的位置,如:

include foo.make

注意,不能以[tab]键开始。
  简单记录了自己的笔记,对于错误和疏漏,欢迎赐教指正。关于make和makefile的更多内容,推荐陈皓的《跟我一起写Makefile》和GNU Makefile手册。

make和makefile简明基础的更多相关文章

  1. MAKEFILE 编程基础之一【转】

    本文转载自:http://www.himigame.com/gcc-makefile/766.html 概述: 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Wind ...

  2. Makefile分析基础

    http://blog.csdn.net/ghostyu/article/details/6866863 在我前一篇写的[ linux驱动学习(一)Makefile基础]中,Makefile写的中规中 ...

  3. 【 MAKEFILE 编程基础之三】详解 MAKEFILE 变量的定义规则使用!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html   ...

  4. 【 MAKEFILE 编程基础之二】MAKEFILE 书写规划以及语法规则!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/768.html   ...

  5. Android makefile编写基础

    首先来看一个简单的Android makefile,这个是我上篇文章写的,重新摘出来: LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_M ...

  6. 【 MAKEFILE 编程基础之四】详解MAKEFILE 函数的语法与使用!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/771.html   ...

  7. 羽夏 MakeFile 简明教程

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.该文章根据 GNU Make Manual 进行汉化处理并作出自己的整理,一是我对 Make 的学习记录,二是对大家学习 MakeF ...

  8. Swift语言 简明基础 代码演示样例

    开发环境: Mac.Xcode6.0 下面内容均可创建ios common line项目来測试 1.Hello World演示样例 使用xcode创建新的common line项目,查看主文件main ...

  9. C Makefile初学基础

    # this is make file hello.out: max.o min.o hello.c gcc max.o min.o hello.c -o hello.out max.o:max.c ...

随机推荐

  1. hdu_1011(Starship Troopers) 树形dp

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 题意:打洞洞收集脑子,你带领一个军队,洞洞互联成一棵树,每个洞中有一些bug,要全部杀死这些虫子 ...

  2. [国嵌笔记][014][Mini2440安装Linux]

    引导安装步骤 相关介绍: 开发板软件构成:Bootloader.嵌入式操作系统.嵌入式文件系统 JTAG接口常用于对flash等器件进行编程,常见的JTAG下载线有并口和USB接口两种 硬件连接: 1 ...

  3. mysql查看表大小

    mysql查看表大小 一:命令 show table status like 'table_name'\G; mysql> show table status like 'x'\G; . row ...

  4. eclipes快捷键

    本文原创作者:pipi-changing 本文原创出处:http://www.cnblogs.com/pipi-changing/ Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D ...

  5. (2-3)Eureka详解

    基础架构 服务注册中心 服务提供者 服务消费者 服务治理 服务提供者 服务注册.在服务注册时,需要确认一下eureka.client.registerwith-eurek=ture参数是否正确,默认是 ...

  6. Java基础——反射 reflect

    什么是反射 (1)Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...

  7. 使用mui框架----移动端页面在所有屏幕下自适应

    写移动端怎么会不用到框架呢? 现在比较火的是mui.amaze UI 之类的,mui是现在最灵活轻便的一个框架,能够从pc到移动灵活的自适应, 只需要调用他定义的类名就能使用,非常方便,只是需要自己来 ...

  8. AI_深度学习概论

    什么是是神经网络? 假如有6间房屋的数据集,已知房子的面积,单位是平方米或平方英尺,已知房子的价格.如果通过这6间房子的价格和房子的面积,预测房子的价格,首先要建立起一个数据模型 ,x轴为价格,y轴为 ...

  9. python_print和input

    什么是输入? --用户从键盘.鼠标或其他终端 输入 的数据 -- input("提示信息") --python 2.7 rqw_input("提示信息") 如何 ...

  10. Not Found The requested URL / was not found on this server.

    http://www.wanysys.cc/coding/php/800.html 今天在做本地PHP项目的时候,想把之前wampserver的本地虚拟服务器环境访问方式改为本地localhost访问 ...