Makefile文件编写

  • 格式:ppt
  • 大小:132.50 KB
  • 文档页数:23

下载文档原格式

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

make的一些常用命令选项
• -p 表示打印出Makefile中所有宏定义和描述内部规 则的相关行 • -i 忽略执行中所遇到的所有错误 • -k 在错误发生后尽可能的继续执行 • -d 打印调试信息 • -s 执行而不显示执行状况 • -n 打印出要执行的命令,但是并不执行这些命令, 可以用来检查Makefile的正确性
Make的工作步骤
• • • • • • • 读入所有的Makefile 读入被include的其它Makefile 初始化文件中的变量 推导隐含规则,并分析所有规则 为所有的目标文件创建依赖关系链 根据依赖关系,决定哪些目标要重新生成 执行生成命令。
三、实验步骤(1)
• 1、在/embedded目录下创建目录,目录名: testmakefile, • 2、在testmakefile下创建目录test1 • 3、在test1下建文件greeting.c,程序见下页 • 4、编写Makefile文件,如下
GNU make的主要预定义变量(续)
• • • • • • • • • • • • AR:归档维护程序的名称,默认值为ar ARFLAGS:归档维护程序的选项 AS:汇编程序的名称,默认值为as ASFLAGS:汇编程序的选项 CC:C编译器的名称,默认值为cc CFLAGS:C编译器的选项 CPP:C预编译器的名称,默认值为$(CC)-E CPPFLAGS:C预编译器的选项 CXX:C++编译器的名称,默认值为g++ CXXFLAGS:C++编译器的选项 FC:FORTRAN编译器的名称,默认值为f77 FFLAGS:FORTRAN编译器的选项
嵌入式系统
Makefile文件编写
一、实验目的
• 1、读懂makefile文件,能根据makefile文件 理清程序结构 • 2、能编写简单makefile
二、实验原理
• 1、makefile • 2、make工具
Makefile
• Makefile主要包含了五部分:
– – – – – 显式规则 隐含规则 变量 文件指示 注释
greeting.c
• 4、执行make • 5、执行./greeting
实验步骤(2)
• 1、在testmakefile下创建目录test2, • 2、在test2目录下创建三个文件greet.c, func1.c func2.c ,
• 3、编写Makefile文件 • 4、执行make • 5、执行./greet
– 变量名:= 值
• 简单扩展型变量 • eg:bar:=os foo = $(bar)
• 引用变量时需在前面加上$
GNU make的主要预定义变量
• $*:去除目标文件扩展名的文件名。比如foo.o为目 标文件,则$*为foo • $+:所有的依赖文件,可能包含重复的文件 • $<:第一个依赖文件的名字 • $?:修改日期比目标文件的创建日期要晚的依赖文 件 • $@:目标文件的完整名称 • $^:所有的依赖文件,不包含重复的文件 • $%:如果目标文件是归档文件,则其表示归档文件 的成员名
变量
• 变量是在makefile中定义的名字,用来代替一个文本字符串, 该文本字符串称为该变量的值 • 变量的定义
– 变量名 = 值
• 递归调用扩展型变量 • eg:foo = $(bar) bar=os 缺点: 1.不能在变量后追加内容。如在: CFLAGS = $(CFLAGS) -O 在变量 扩展过程中可能导致无穷循环 2.在定义中引用任何函数时,变 量一旦展开函数就会立即执行
实验步骤(3)
• 1、在testmakefile下执行cp –rf test2 test3 • 2、进入test3目录,保留后缀为c的源文件, 其他删除 • 3、建立makefile文件,内容见下页 • 4、执行make • 5、执行./greet
makefile
四、实验思考
• 1、怎样自己来写简单的makefile文件? • 2、怎样组织多个源文件的工程,进行编译? • 3、写makefile文件有哪些要注意的?
隐含规则
• make内部自定义的一些规则。当一个target没有显 式的定义生成规则,make寻找一条隐含规则生成 该target 例: • foo : foo.o bar.o
cc -Βιβλιοθήκη Baidu foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
一般来说foo.o是由foo.c等源文件生成,如果foo.o没 有定义生成规则,则make可能编译foo.c生成foo.o
make工具
• make是一个重要的软件维护程序,可以根据程序 文件的修改情况自动重新编译链接目标代码,以 保证目标代码总是由它的最新文件组成 • make根据Makefile文件所描述的规则和文件最后修 改的时间来重新编译链接目标代码 • make的命令格式:
– make [-f makefile] [ option ] ... target ...
显式规则
• 由Makefile的书写者明显指出,要生成的文 件,文件的依赖文件,执行的命令
– target ... : prerequisites ... command ... – target:要生成的目标文件 – prerequisites:target所依赖的文件 – command:make所要执行的命令(任意的shell 命令)
变量
• 变量是在makefile中定义的名字,用来代替一个文本字符串, 该文本字符串称为该变量的值 • 变量的定义
– 变量名 = 值
• 递归调用扩展型变量 • eg:foo = $(bar) bar=os
– 变量名:= 值
• 简单扩展型变量 • eg:bar:=os foo = $(bar)
• 引用变量时需在前面加上$
文件指示 与 注释
• 文件指示
– 引用其他的Makefile:include <filename> – 根据某些情况指定Makefile中的有效部分:ifeq 、 ifneq,ifdef、ifndef – 定义一个多行的命令 :define
• 注释:Makefile中只有行注释,其注释使用 “#”字符