




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
make 介绍Windows系统 电脑资料 Make Make通常用来维护程式,使可执行档的内容保持和原始程式的一致性,因其依循唯有变动才需重新编译连结的方式,由各档之间的依存关系自动去编译连结,如此可省下了宝贵的时间和系统资源, Make Make通常用来维护程式,使可执行档的内容保持和原始程式的一致性,因其依循 唯有变动才需重新编译连结的方式,由各档之间的依存关系自动去编译连结,如 此可省下了宝贵的时间和系统资源。在Linux中最普遍的例子应是核心(kernel)的重 编,当读者把gclearcase/ target=_blank 等程式和核心原始程式安装完後(Slackware中为D套件,SLS中为C和 S套件),便可依实际情况去更新或置换核心的内容。核心是由许多不同的部份所组成 ,如行程的管理、档案系统的支援、周边配备的驱动程式、网路通讯的协定等,当组 成的部分有所更新或是不需要时,就需要重编核心,以便产生符合真实环境的核心程 式,使得PC能得到最佳的利用。如没有SCSI卡的PC便不需要SCSI的驱动程式,而且可 依光碟和音效卡的种类更换不同的驱动程式。如此繁琐的过程,在make的帮助下,可 以作得又快又好,只需透过一连串的选择,其馀就完全交给make去负责,真是省事又 方便。和核心编译有关的细节我们稍後再共同研讨。make的最初目的是帮助程式设计 师作为编译连结时的管理,因此我们先来看看make的用法。 使用时机和环境 当程式写作或是更新後,编连的步骤便是使用make的最好时机。在Linux中,启 动make只消打make便可,make会先去找同目录下的Makefile或是makefile,若找不到 便出现make的参数使用方法。makefile是一个文书档,可用vi或是jed,它可说 是make的script,make就完全依此档的内容来动作。在这个档中,记录了档案的产生 方法、相关性质和一些变数等。在这个档中,凡是以#为开头者,整行都视为注解, 和shell的script. file是相同的。makefile中约略可分成变数区和指令区两部分, 纵贯档案的有依存、字尾等规则,共同构成makefile的语法。 Makefile中的变数 在makefile中可将一字串设定给一变数,需要时可如shell的script. file展开 ,因此也可称为巨集(marco),变数设定的方式为: 变数名称=设定值 除了某些特殊符号外(如#、:、;、=、空白、定位字元、新列字元),其馀都可作 为设定值的内容。一般来说,最好使用英数字,以避免发生不可预料的错误,以下是 一些合法的设定 SOURCE = test1.c test2.c test3.c OBJ = main.o 当要取用(展开)变数时,只需用()将变数括起来,前头加上$符号即可,如$(OBJ) 这个变数,当make执行至此时,将视为main.o。 依存关系 make的主要工作方式,是依依存关系(dependency)来工作的,而所谓的依 存关系,就是指两或多个档案间彼此的关系,譬如我们写了一个test.c程式,当我们 编译如下时: $ g -O -o test test.c 便会产生test.o这个目的档,因此test.o便是依於test.c,当test.c改变时, test.o也需重新编译,才能保持程式的最新版本;若test.o是由test1.c和test2.c 所组成的,那test.o同时依存於test1.c及test2.c,依存关系便是相关档案的先後关 系,和档案的生成方式,如C语言的原始档.c需或g作编译後才能生成目标档 .o,而且make功能强大,在依存规则中并不限定只能作和编译有关的动作。 接下来就是将依存规则写入makefile中了,依存规则的格式如下: 目标档;依存档;命令 目标档就是依存档照命令的方式造出的档案,如上例便可写成: test:test.c;g -O -o test test.c 或是可将命令写在下一行,但是需有定位字元作为前导,因此可写成: test:test.c g -O -o test test.c 通常以此方式撰写,认为是较好的方式;若目标档或依存档中有两个以 上的档案,各档案名称间以空白隔开便可,如下: test:test1.c test2.c g -O -o test test1.c test.c 如此定下规则,那天若是test1.c或test2.c有修改时(日期会比test.o还新) , make便会重新编译,若是test.o为最晚者,那就没有执行命令的必要了。 接下来我们先看范例一: 范例一: 01 # 02 # Makefile for cshow 03 # By Ivor Chen 04 # 08/31/1994 05 # 06 07CC= g 08 OPTIMIZE = -fomit-frame-pointer -O2 -s 09 CFLAGS = $(DEFINES) $(OPTIMIZE) 10 LFLAGS = -N 11 12 PROGS = cshow 13 PROGS_O = cshow.o 14 LIBS = -lvgagl -lvga 15 16 all: progs 17 18 progs: $(PROGS) 19 20 objs: $(PROGS_O) 21 22 .c.o: 23 $(CC) $(CFLAGS) -c -o $*.o $.depend 44 g -MM $(patsubst %.o,%.c,$(PROGS_O) .depend 45 46 include .depend 范例一是笔者的cshow程式的makefile,其中01至05行以#开头作为注解用;07至 14行是设定变数,其中07-10所设定的是有关编译器及其命令,11至14行则设定被编 译的档案名称及额外需被连结的程式库名称;第16行便是一个依存规则,若是我们在 命令列下只打make,那make便会去寻找makefile中的第一个规则来工作,在此这便是 第一个规则,但这个规则比较特殊:一、本规则并无命令,二、本规则中的all 并不是档名,而且其後的progs是下一条规则(第18行)的目标档,这样一来,当 我们一去make all时,由於all是由progs所构成,因此会跳到第18行去,而第18行 的$(PROGS)是cshow,为做本make最终产生的档案,为一可执行档,第20行的cshow.o 便是最终的目的档,那cshow和cshow.o又是如何产生的?这和第22、25、28行有关, 这几行是利用下一节的字尾规则,稍後再论, 范例一中第32和35行是makefile中另外常见的规则,其目的不是产生目的档 ,而是去删除某些档案,35行的动作包含在32之中,35行的目的是删除可执行档 (rm -f $(PROGS);而32行会先执行35行的动作,再去删除*.o和*的档;若是我 们更新了一大群source的部份时,最好要make clean,否则仍会发生.o和其source 间版本不同的错误。 字尾规则 通常我们会以特定的字尾来表示不同档案的种类,如.c 便是代表c语言的原始档 , 而.o 通常代表此档经特定的编译程式所产生的目的档,由於在同一系统中同一语 言原始档的编译程式皆相同,我们便可为这些原始档定出一定的编译方式,这便是字 尾规则(Suffix rule)的用意所在,字尾规则通常是在於定义Makefile的内建依存 规则;字尾规则的语法如下: .字尾一.字尾二: 命令 其中的意义是字尾一的档案经命令的作用後产生字尾二的档案,如范例一中 的第22和23行: 22 .c.o: 23 $(CC) $(CFLAGS) -c -o $*.o $/dev/null 2/dev/null 将工作送至背景,将讯息抑制。 除了lilo,我们也可由A磁碟机来启动,这时便需以make zdisk来将核心送到开 机片上;在光碟月刊八月号上介绍了另一个由DOS来启动的程式loadlin.exe,而且也 出现了umsdos的安装方式,这对使用者来说是莫大的方便,因为在过去想安装Linux 的人来说,要重割硬碟是件很不便的事,而且事先旧有的资料要如何处理也是很伤脑 筋,这使得想认识Linux的人裹足不前,现在不利因素皆已去除,方便大门已开,读 者可利用八月号的光碟直接安装(不过请先取得Q和U套件),就把Linux直接装入DOS的 linux子目录,再用开机片开机,对於原来的程式或资料不会造成损坏,就能使Linux 动起来,若是再利用多重开机和loadlin.exe,在一开机就能选择作业系统,是再也 方便不过的事了,如果是利用这种方式开机者,重编核心要利用make zImage来作, 并在组译完成後,将zImage拷到loadlin.exe能读到的地方,如/dev/hda0/loadlin( Linux和DOS不在同一分割中)或/DOS/loadlin(使用umsdos),记得要cp过去,不然 重组徒然浪费时间而已。 Linux是一个极新的领域,其
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南通彩钢板屋顶施工方案
- 61社群活动策划方案公司
- 大开挖土方施工方案
- 小红书口碑营销方案设计
- 送气工行为规范
- 工程问题专家咨询方案
- 亲子徒步爬山活动方案策划
- 2025年会计从业资格考试专项训练试卷:财务报表编制与分析
- 新零售行业新零售数字化经营
- 2025继续教育公需课必修题库及参考答案
- 教育行业重难点分析及解决措施
- 雷暴哮喘治疗方法
- 行政执法工作培训
- 无人机集群控制技术-深度研究
- 合伙开工厂 合同范例
- 比亚迪秦EV新能源汽车整车控制系统
- 部编版小学道德与法治六年级上册配套表格式教案(全册)
- 商务星球版八年级地理上册4.1《因地制宜发展农业》听课评课记录
- 厨房6S管理培训
- 锂电池pack生产线可行性报告
- 2025年政府机关《干部履历表》标准模板
评论
0/150
提交评论