makefile教程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

自动化编译器配置文件简介(续)
自动化编译器配置文件可以起名为:
GNUmakefile Makefile makefile
make命令按照以上顺序在当前目录搜索 也可使用别的文件名来书写makefile,此 时make命令要加选择:-f
例如: make –f mymake
自动化编译器配置文件简介(续)
2. 指定变量
edit : main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o gcc -o edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o
【例 4-6】
/* ch4_6.c */ #include <stdio.h> main() { printf("hello\n"); foo(); }
/* foo.c */ #include <stdio.h> void foo() { printf("you are in foo"); }
【例 4-6】(续)
例 4-7:makefile实例
edit : main.o kbd.o command.o display.o \ 连接符 insert.o search.o files.o utils.o gcc -o edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o main.o : main.c defs.h gcc -c main.c kbd.o : kbd.c defs.h command.h gcc -c kbd.c 目标文件 command.o : command.c defs.h command.h gcc -c command.c display.o : display.c defs.h buffer.h 依赖文件 gcc -c display.c insert.o : insert.c defs.h buffer.h 生成规则 gcc -c insert.c search.o : search.c defs.h buffer.h gcc -c search.c files.o : files.c defs.h buffer.h command.h gcc -c files.c utils.o : utils.c defs.h makefile结构分析 gcc -c utils.c clean : rm edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o
target...:prerequisites... command... ...
MakeFile显示规则(续)
target称为规则的目标,通常是最后 需要生成的文件名,或是为了实现这 个目的而必须的中间过程文件名。另 外,目标也可以是一个make需要执 行的动作的名称,如目标“clean”, 称这样的目标是“伪目标”。伪目标 一般不会被自动执行,而必须通过命 令行指定伪目标名才能执行,例如 “make clean”.
edit : main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o gcc -o edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o main.o : main.c defs.h gcc -c main.c kbd.o : kbd.c defs.h command.h gcc -c kbd.c command.o : command.c defs.h command.h gcc -c command.c display.o : display.c defs.h buffer.h gcc -c display.c insert.o : insert.c defs.h buffer.h gcc -c insert.c search.o : search.c defs.h buffer.h gcc -c search.c files.o : files.c defs.h buffer.h command.h gcc -c files.c utils.o : utils.c defs.h gcc -c utils.c clean : rm edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o
方式1:命令行模式直接使用gcc命令编译程序,格式如下: #gcc main.c foo.c –o hello 方式2:使用GNU make工具编译程序,需要编写Makefile,内容如下: hello:main.o foo.o gcc main.o foo.o –o hello main.o:main.c gcc main.c –o main.o foo.o:foo.c gcc foo.c –o foo.o 在命令行运行make命令,同样可以编译出可执行程序hello。如下 图所示:
objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o
2。在makefile中使用变量
objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o edit : $(objects) gcc -o edit $(objects) main.o : main.c defs.h gcc -c main.c edit : main.o kbd.o command.o display.o \ kbd.o : kbd.c defs.h command.h gcc insert.o search.o files.o utils.o -c kbd.c command.oedit main.o kbd.o command.o display.o \ gcc -o : command.c defs.h command.h gcc -c command.c insert.o search.o files.o utils.o display.o : display.c defs.h buffer.h objectsgcc -c display.c command.o display.o \ = main.o kbd.o insert.o : insert.c defs.h buffer.h insert.o search.o files.o utils.o gcc -c insert.c search.o : search.c defs.h buffer.h gcc -c search.c files.o : files.c defs.h buffer.h command.h gcc -c files.c utils.o : utils.c defs.h gcc -c utils.c clean : rm edit $(objects)
GNU make的执行过程分为:
在Linux命令行提示符输入make,它会在 当前目录下按顺序寻找GNUmakefile、 Makefile和makefile,如未找到则报错, 找到则把Makefile文件中的第一个目标作 为最终目标。 按照“堆栈”顺序,依次找到每一个目标文 件,判断新旧关系,必要时生成新的目标文 件,直到生成最终目标。
例:makefiBiblioteka Baidue实例
总结
对于一个Makefile文件,make首先 解析默认目标所在的规则,根据依赖 文件(例子中第一个规则的8个.o文件) 依次寻找创建这些依赖文件的规则。 创建或者更新每一个规则依赖文件的 过程都是这样的一个过程。 更新默认目标的过程中,如果任何一 个规则执行出现错误make就立即报 错并退出。
【例 4-5】
/* ch4_5.c */ #include <stdio.h> int main() { printf(“hello everybody. \n”); return 0; } 方式1:命令行模式直接使用gcc命令编译程序,格式如下: #gcc hello.c –o hello
方式2:使用GNU make工具编译程序,需要编写Makefile,内容如下: hello:hello.c gcc hello.c –o hello
二、MakeFile规则
MakeFile显示规则 指定变量 隐含规则 清空目标文件的规则 模式规则 伪目标 标准目标 特殊目标 命令错误 通配符
1. MakeFile显示规则
Makefile的基本结构由描述规则组成, 规则负责描述在何种情况下如何重建 目标文件,通常规则中包括了目标的 依赖关系和重建目标的命令。一个简 单的Makefile描述规则如下:
嵌入式系统程序设计
大连理工大学软件学院 嵌入式系统工程系 赖晓晨
自动化编译器配置
自动化编译器配置文件简介 MakeFile规则 MakeFile的变量 MakeFile的执行 make内嵌函数 make的常见错误信息
一、自动化编译器配置文件简介
Makefile文件描述了整个工程的编译、 链接规则,其中包括:工程中的哪些 源文件需要编译以及如何编译,需要 创建哪些库文件以及如何创建这些库 文件,如何产生期望得到的最终可执 行文件。 Makefile文件描述了工程中所有文件 的编译顺序、编译规则,make根据 这些规则来编译工程。
【例 4-6】(续)
【例 4-6】(续)
【例 4-6】(续)
比对两种方式(产生文件的时间), 我们发现:如果修改源文件foo.c,采 用方式1重新编译程序,在编译foo的 同时,未被修改的main.c也被重新编 译,效率低下。采用方式2重新编译程 序,make命令会分析各源文件、目 标文件和可执行文件的生成时间,决 定哪些文件需要重新编译和链接,因 此main.c不需要重新编译,效率提高。
3. 隐含规则
什么是隐含规则
一些经常使用而且使用频率很高的,事先
已经约定好,不需显式书写出的规则。隐
含规则是一种惯例,make会按照这种
“惯例”心照不宣的运行。
隐含规则(续)
objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o edit : $(objects) gcc -o edit $(objects) 隐含规则 main.o : defs.h kbd.o : defs.h command.h command.o : defs.h command.h display.o : defs.h buffer.h insert.o : defs.h buffer.h search.o : defs.h buffer.h files.o : defs.h buffer.h command.h utils.o : defs.h .PHONY : clean clean : rm edit $(objects)
MakeFile显示规则(续)
prerequistes称为规则的依赖文件, 是生成规则目标所需要的文件名列表。 通常是一个目标依赖于一个或者多个 文件。 command称为规则命令行,这是规 则所要执行的动作,可以是任意的 shell命令或者可以在shell下执行的 程序,它限定make执行这条规则时 执行的操作。
相关文档
最新文档