Makefile

Eugene_iOSIP属地: 青海
1字数 1,206阅读 207

Makefile概述

Linux环境下,当用户编译文件过多,可以通过Makefile实现模块化编译文件。
Makefile它是一个脚本文件,定义了一套规则,决定了哪些文件要先编译,哪些文件后编译,哪些文件重新编译;我们可以根据规则来执行相应的脚本文件,实现自动化编译。
一个Linux项目工程通常只要一个make命令就可以完成编译、链接,甚至更复杂的功能。可以说,任何一个Linux源程序都带有一个Makefile文件。

Makefile优点

1、管理代码的编译,决定该编译什么文件,编译顺序,以及是否需要重新编译。
2、节省编译时间。如果文件有更改,只需重新编译此文件即可,无需重新编译整个工程。
3、一劳永逸。Makefile通常只需编写一次,后期就不用过多更改。

Makefile结构说明

Makefile里主要包含了五个东西:显式规则隐晦规则变量定义文件指示注释

1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。 刚才写的疑似shell脚本的Makefile全部都是显示规则。

2、隐晦规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。

3、变量的定义。在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点像C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。

4、文件指示。其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样。

5、注释。Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,这个就像C/C++中的“//”一样。如果你要在你的Makefile中使用“#”字符。

Makefile的规则

Makefile规则的基本格式
格式一:单目标,多个依赖

<target> : <depends>
[tab] <commands>

格式二:多个目标,多个依赖,多个命令

<target1, target2> : <depends>
[tab] <commands>
[tab] <commands>

格式三:规则之间的嵌套

// 规则一,该规则依赖规则二、三
<target1> : <target2,target3>
[tab] <commands>
// 规则二
<target2> : <depends>
[tab] <commands>
// 规则三
<target3> : <depends>
[tab] <commands>

规则的基本格式解释

1、目标(target):通常是要生成的文件名称,目标可以是可执行文件或其他obj文件,也可以是一个动作的名称。
2、依赖文件(depends):生成目标 需要的文件,一个目标通常有几个依赖文件(也可以没有)。
3、命令(commands):make执行的动作,一个规则可以含几个命令(也可以没有),有多个命令时,每个命令占一行。

Makefile变量的分类

1、自定义变量

定义变量:
变量名 = 变量值
引用变量:
$(变量名) 或 ${变量名}
注意:
1、makefile变量名可以数字开头
2、变量大小写敏感
3、变量一般都在makefile的头部定义
4、变量几乎可在makefile的任何地方使用

2、系统环境变量

make工具会拷贝系统的环境变量,并将其设置为makefile的变量,在makefile中可直接读取或修改变量。

3、预定义变量

makefile中有很多预定义的变量,这些变量具有特殊的含义,可直接在makefile中使用。

常用的预定义变量
$@ :目标名
$<:依赖文件列表中的第一个文件
$^:依赖文件列表中除去重复文件的部分
CC:C 编译器的名称,默认值为cc
CGLAGS:C编译器的选项

写在最后

最实用的Makefile教程
Makefile 编写教程(由简至难)
Makefile详解及使用
一文入门Makefile
Makefile由浅入深--教程、干货

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
2人点赞
Eugene_iOSThe future is already here!it is just not evenl...
总资产20共写了4.1W字获得-30个赞共54个粉丝

推荐阅读更多精彩内容

  • makefile 介绍 make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程...
    Stan_Z阅读 1,647评论 2 15
  • 来自陈浩的一片老文,但绝对营养。 示例工程:3 个头文件*.h,和 8 个 C 文件*.c。 初 编译过程,源文件...
    周筱鲁阅读 4,747评论 0 17
  • 1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 ...
    仙灵儿阅读 460评论 0 0
  • 什么是 Makefile 呢? Makefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链...
    JackHCC阅读 10,676评论 0 2
  • 一.编译&链接 1.编译: 1)每个源文件都对应于一个中间目标文件(O文件或是OBJ文件); 2)编译器只检测程序...
    Brlat阅读 660评论 0 0