- 1、本文档共47页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
讲师:杨行;课程目标;课程安排;课前提问;本章目标;实用的软件都是拥有多个源文件
这些源文件称之为模块
多模块软件
多模块软件
;一个差强人意的办法
使用shell脚本
上述的缺点,导致了make的产生。
;工程管理器,顾名思义,是指管理较多的文件
Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作
Make将只编译改动的代码文件,而不用完全编译。;管理多模块程序的编译和连接
读取一个说明文件---Makefile
描述系统中各模块的依赖关系
make使重编译的次数达到最小化
Makefile描述的依赖关系
各组件文件的时间戳
Makefile 实质上是一种脚本语言
;语法;常用选项;知识点2—Makefile文件;目标列表: 关联性列表
Tab命令列表;注释
#
连接符
\
关联列表和命令列表中使用shell通配符
?
*
[…];实例
;把power.c分成两个文件
;
;
;当目标文件比关联文件更新
更新关联文件,对比;进一步分成六个文件,建立依赖树
;$cat main.c
#includestdio.h
#include”main.h”
#include”compute.h”
#include”input.h”
main()
{
double x,y;
printf(”The program takes X and Y from stdin and displays x^y.\n”);
x=input(PROMPTl);
y=input(PROMPT2);
printf(”x^y is:%6.3f\n”,compute(x,y));
};$ cat makefile
power:main.o input.o compute.o
gcc main.o input.o compute.o -o power -1m
main.o:main.c main.h input.h compute.h
gcc -c main.c
input.o:input.c input.h
gcc -c input.c
compute.o:compute.c compute.h
gcc -c compute.c
$;-默认的后缀规则
SUFFIXES:.o.c.s
.c.o:
$(CC)$(CFLAGS) -c $
.s.o:
$(AS)$(ASFLAGS) -o $@ $;Makefile的规则和变量;Makefile的规则和变量;简单变量
定义: 变量名 :=[文本]
添加: 变量名 += [文本]
引用
$(变量名)
${变量名}
$单字符变量
;刚才的例子
OBJS = kang.o yul.o
CC = gcc
CFLAGS = -Wall -O -g
sunq : $(OBJS)
$(CC) $(OBJS) -o sunq
kang.o : kang.c kang.h
$(CC) $(CFLAGS) -c kang.c -o kang.o
yul.o : yul.c yul.h
$(CC) $(CFLAGS) -c yul.c -o yul.o;$cat makefile
CC := gcc
OPTIONS := -O3
OBJECTS := main.o
OBJECTS += input.o compute.o
SOURCES := main.c input.c compute.c
HEADERS := main.h input.h compute.h
power:$(OBJECTS)
$(CC)$(OPTIONS) -o power $(OBJECTS) -lm
main.o:main.h input.h compute.h
input.o:input.h
compute.o:compute.h
power.tar:makefile $(HEADERS) $(SOURCES)
tar -cvf power.tar makefile $(HEADERS) $(SOURCES)
clean:
rm –rf *.o
$;变量名;complete:power
@echo”Build complete”
power:$(OBJECTS)
$(CC)$(OPTIONS)-O $@ $^ -lm
@echo”The executable is in the power file.”
main.o:main.h input.h compute.h
compute.o:compute.h
input.o:inp
文档评论(0)