东软集团(大连)有限公司 SVVD事业部-于忠华

Slides:



Advertisements
Similar presentations
陳旺全醫師主講 健康養生茶飲 明目菊花茶 明目菊花茶 成分:菊花五錢、 500c.c 熱水沖泡 成分:菊花五錢、 500c.c 熱水沖泡 功效:可治療急慢性結膜炎、頭暈 功效:可治療急慢性結膜炎、頭暈 頭痛、口苦、口乾、高血壓 頭痛、口苦、口乾、高血壓.
Advertisements

Copyright © All Rights Reserved. 《小飞侠考试改卷系统》下载地址: 一线信息技术教师的烦恼 学生拨掉网线或禁 用网卡或乱改 IP , 或用软件终止电子 教室客户端 … 学生人数太多, 无法识别,难以.
Copyright © 上海师范大学图书馆 All Rights Reserved 高校英语资源数据库 使用指南 最后更新时间 2010 年 2 月.
六大類食物 五穀根莖類 六大類食物 油脂類 蛋魚肉豆類 奶類 蔬菜類 水果類. 五穀根莖類 : 提供熱量 : 部份蛋白質,維生素,礦物質,及膳食纖維 包含麵 ( 及麵包饅頭 ) ,飯類,蕃薯等食物 也就是一般所稱的 " 主食 " ( 蘿蔔不是這一類,是屬於蔬菜類喔! ) 飲食建議吃三到六碗 並推薦攝取全穀類食品.
正確睡午睡精神更好 正確睡午睡 精神更好 可降血壓 增加思考能力 懶懶的冬天加 上星期一又是假日後上班,如果能夠在 中午補個眠,稍微休息一下,對於精神 的提振及下午工作效率都有幫助。但冬 天睡午覺要注意保暖以及水分的補充, 避免受涼或是血液循環不好,造成手或 腿麻痛,注意這些小地方可以讓睡午睡 更健康!
揮別電腦族疲勞症候群 主講人 : 陳潮宗 中醫師. 常有症狀一 起因&症狀: 起因&症狀: 坐姿不正最易引起腰酸背痛、 過度看螢幕則眼睛疲勞酸痛。 治療重點: 治療重點:補固腰腎、明目保睛。
引言 高血壓自我健康管理包含飲食、 運動、 及健康生活型態三大方向。 飲食 是改善高血壓的重要部分, 並提 供飲食方式來改善高血壓。
人事室專題計畫業務報告 人事室 謝明峯 轉 一、專任助理注意事項 計畫案如有聘任專任助理者, 請依據「南 華大學專案助理報到程序單」內容, 將資 料繳交至人事室 ( 請於聘任到職日前繳交, 以免影響到本身權利 ) 。 離職儲金或勞工退休金 依勞工退休金條例相關規定,
山伯與英台在健康書院修業完 成後,一行人逗陣開開心心的 回自己的家鄉 …… 於是開啟了另一段 ~ 新梁祝的故事 ~ 在下 梁山伯 小女子 祝英台 我是 阿成 我是 阿香.
糖尿病的饮食控制 厦门长庚医院张翼翔. 糖尿病 糖尿病的发病率逐年增高 糖尿病的发病率逐年增高 糖尿病对健康和生命的危害 糖尿病对健康和生命的危害 心、脑、肾、神经等 心、脑、肾、神经等 糖尿病的表现和诊断 糖尿病的表现和诊断 糖尿病的治疗 — 终身治疗 糖尿病的治疗 — 终身治疗.
第八章 膳食與營養 第一節 均衡營養與膳食 年 7 月公布新版「每日飲食指南」, 依食物營養特性,分為六大類: 全榖根莖類 蔬菜類水果類 低脂乳品類 油脂與堅果種子類 豆魚肉蛋類 食全十美.
中醫臨床常見養生藥膳 臺 北 市 立 聯 合 醫 院中醫院區 院長 鄭振鴻. 壹、前言 在臺灣地處亞熱帶的氣候,冬季溫暖,夏 季炎熱,雨量多的特性。吃補的概念源自 中國大陸,但生活習性與食物亦有其地域 性,因此針對臺灣常用藥膳的食物與藥物 的性能作用,解析其效用、功能,了解食 物與人的關係,利用食物特性,藥物的效.
青春期 女生可以早在八、九歲, 或晚到十三、四歲才進入 青春期。 男生早的在十、十一歲, 晚到十四、五歲,甚至更 遲才進入青春期。
高職生的早餐飲食習慣之研究 以市立士林高商為例 二年九班 李婷葦 二年九班 卓佳惠 二年九班 郭胤彣 關鍵字:早餐. 飲食習慣. 士林高商.
Copyright © by ARTCOM PT All rights reserved. 大众媒体与医患关系 山东大学口腔医学院 郭春晓.
急性腹痛 急性疼痛. 急性疼痛 — 孙树杰、沈洪、 刘保池 (1)(1)(1)(1) 概 述 (2)(2)(2)(2) 重症急性腹痛的临床特点 (3)(3)(3)(3) 急性腹痛的分类及诊治 主要教学内容.
一张图读懂 中国乳制品行业现状及 发展趋势和前景.
Copyright © 2011 All rights reserved.
性教育教學模組設計 主題:身體自主權 台中市忠明國小 巫偉鈴.
Unix 指令4.
昆山华东信息科技有限公司 Copyright © 2009 ECI Corporation, All Rights Reserved
整体销售方案 中山市美好物业代理有限公司
說明完後將會有一個小測驗歐! 要認真聽歐!
臺中市頭家國小 生理衛生講座 青春期的奧秘 ‧說到青春期,你會想到? ‧班級表現最好的,有獎徵答有優先權。 葉孟娟老師、黃文玲老師.
花孃心語.
中国特色社会主义政党制度 主讲:西南大学 李强 2011年12月28日.
芳香小物.
健康飲食觀 主講人:蘇麗棗.
腦筋要變通,舉一反三的創意; 和其他東西結合,馬上就有創意; 動詞用一下,就可以變花樣; 其實,創意超簡單,有用心就有創意。
汽车灯具质量提升项目 市场调研报告 呈送:重庆长安汽车股份有限公司 作者:**********研究 日期: 2009年11月 1.
中国(成都)斯宝特房地产营销策划有限公司 2007年5月22日
欢迎南京市政治学科的教研同仁 光临指导.
生命本是一个完整的过程, 但这个过程, 我们画得不圆。
台灣地理環境與自然災害 小琉球島嶼 組別:第八組 班級:四容四B 組員:黃如翊 D 蔡瑞玹 D
1. 民主社會裡,公民的參與有其重要性,而透過政治參與無法達成下列哪一項目的?
动画分镜头技巧 梁思平.
针刀医学移位性颈椎病 的X线诊断 浙江省仙居县中医院 柴晓峰.
定风波.
第1讲 实验环境.
LINUX 环境下程序开发基础 曙光用户培训课程系列 课程时间:1.5小时 更新日期:2008年3月.
基于操作系统的编程复习 张玉宏
第十三章 以全球市場行銷策略談科技管理與創新-以三星電子全球布局為例
兒 童 營 養 高雄長庚醫院營養治療科 營養師 洪凱殷.
目录 金廊整体市场分析 金廊项目推广统计 竞品对比及竞品个案情况. 目录 金廊整体市场分析 金廊项目推广统计 竞品对比及竞品个案情况.
读秀学术搜索 读秀的图书搜索. 能够为我们解决一个 什么问题? 是什么东西? 读秀 1. 读秀知识库是以 170 万种中文图书、 6 亿页 全文资料为基础的超大型数据库。 2. 为读者提供深入到图书内容章节和全文的精 度检索,全面立体的多面检索,部分文献的 原文试读,以及参考咨询服务,是一个真正.
我们告诉你的不仅仅是…… © 2009 Citicsf. All rights reserved..
Linux环境下程序编译 曙光信息产业(北京)有限公司.
编译与多文件.
第4章 程序控制结构与算法基础.
以下內容只能就若干重要問題畧作簡介, 討論的內容並非巨細無遺,更不能視為法律意見。 如須諮詢有關版權法的法律意見,應向律師請教。
永远的 Autotools ——GNU Build System 简介(一)
Linux核心編譯與模組管理 2013/01/19.
中国科学院计算机网络信息中心 中国科技网网络中心 All rights reserved
第六章 shell 程序调试 一. 程序执行状态跟踪 程序: -n 读取命令, 但不执行. 主要用于跟踪程序流程是
该模板分五部分组成 每部分有不同的选择 根据需要选取使用 使用时请删除此页 欢迎选择大梦PPT 封面 目录 排版页 图表页 结束页
可愛的鍬形蟲 五年四班2.
一種風靡全球的健康居住觀 正在逐漸蔓延! 居住不只講風水 更要追求身心舒適且善待自然的綠風水
大豆有望继续跨年度牛市行情 各位领导,各位同仁,大家下午好,我是浙商期货的徐文杰,今天下午我们团队将要讲的题目是 大豆有望展开跨年度牛市行情
杨振伟 清华大学 第一讲:Linux环境下编程(1)
如何制订幼儿园园本培训工作计划 大连亿达世纪城幼儿园 姜承华 2011年3月10日.
Maranatha 主耶稣啊 我深愿祢快再来 直到地极所有民族 敬拜称颂赞美主圣名
合作 共享.
网校温州中学 关于显性基因与隐性基因 ——
EBSCO教育学数据库 ERC 最后更新时间 2009年5月
厉害了,我的国! 15会计2班团支部 2018年4月20日.
杨振伟 清华大学 第一讲:Linux环境下编程(1)
嵌入式Linux编程环境.
旅游学与酒店管理全文数据库 HTC 最后更新时间 2009年5月
读秀学术搜索.
客家獅中的青獅(文的)和 黃獅(武的) 青獅(比較溫和;美濃才有) 黃獅(比較凶;內埔.萬巒才有).
Presentation transcript:

东软集团(大连)有限公司 SVVD事业部-于忠华 Makefile简析 东软集团(大连)有限公司 SVVD事业部-于忠华 Copyright 2010 By Neusoft Group. All rights reserved

目录 1. Makefile介绍 2. Makefile书写规则 3. Makefile中的语法 4. 如何让依赖关系的自动化 内容概要 1. Makefile介绍 2. Makefile书写规则 3. Makefile中的语法 4. 如何让依赖关系的自动化 5. Makefile的运行 6. 实践应用举例

Makefile 介绍 概要 一个完备的大型工程中,源文件不计其数,按类型、功能、模块分成了很多目录。需要一系列规则来实现自动化的编译、链接。 Makefile作为make命令的输入文件,按照一定的规则来完成源文件的编译、链接。只要Makefile写的好,通过一个make命令就能完成整个工程的编译 一个好的Makefile,在增、删、改文件的时候,不需要修改Makefile文件的情况下,能自动识别并完成变更后文件的编译,最大限度的节约编译时间。 目标: 1. 通过本次学习能读懂别人写的Makefile 2. 通过本次学习能完成一个普通工程的makefile

Makefile书写规则 规则—依赖关系 Makefile其实就一个核心规则: Def1.h Def2.h Def3.h Main.c F1.c F2.c Main.o F1.o F2.o Main Makefile其实就一个核心规则: target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)。 prerequisites就是,要生成那个target所需要的文件或是目标。 command也就是make需要执行的命令。(任意的Shell命令) 就是说target这个目标文件依赖于prerequisites,他的生成规则定义在command中 Prerequisites中只要有一个以上比target新,command都会重新执行。 Target…:prerequisites… command …

Makefile书写规则 举例 举个例子说明makefile的书写规则和执行过程: Main.o :Main.c Typedef.h CC –o Main.o Main.c Draw.o : Draw.c CC –o Draw.o Draw.c Draw : Main.o Draw.o CC –o Draw Main.o Draw.o all: Draw clean : rm Draw Main.o Draw.o 这个makefile可以通过一句make命令生成Draw的可执行文件,也可以通过make clean清除所以make出来的文件 Makefile默认从all开始解释执行,all依赖于Draw,所以先执行Draw,Draw又依赖于Draw.o和Main.o,所以最先执行Draw.o和Main.o。

Makefile中的语法 Makefile中的基本元素 1. 目标文件,标签(Lable) 2. 源文件 3. 变量 在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串。变量可以使用在“目标”,“依赖目标”,“命令”或是Makefile的其它部分中。 如:Object = Main.o Draw.o 使用变量是要在变量前加$,最后用()或{}括起来,比如$(Object) Makefile中还有些奇怪的变量:$<(源文件), $@(目标文件),

Makefile中的语法 Makefile中的语法 1. 赋值语句 赋值表达式有”=”,”:=”,”+=”,”?=” [:=] 只使用定义好的变量,能避免递归 [+=] a+=b => a=a+b [?=] 如果变量没定义则赋值,否则不执行 A = $(B) B = $(A) # 存在递归问题 # 解决对策: A := $(B) B := $(A)

Makefile中的语法 Makefile中的语法 2. 条件判断 条件表达式有:ifeq,ifneq,ifdef,ifndef 使用方法: 注:make是在读取Makefile时就计算条件表达式的值,并根据条件表达式的值 来选择语句,所以,你最好不要把自动化变量(如“$@”等)放入条件表达式中 使用方法: ifXXX XXXX Else endif

Makefile中的语法 Makefile中的语法 3. 函数调用 $(<function>; <arguments>;) 参数间以逗号“,”分隔 例:$(subst <from>;,<to>;,<text>;)把字串<text>;中的<from>;字符串替换成<to>; Makefile中支持的函数不多,简单列举如下 # 将字符串”Main.cpp Draw.cpp”中的cpp换成o SRC_FILE = Main.cpp Draw.cpp OBJECT = $(subst cpp, o, $(SRC_FILE))

Makefile中的语法 Makefile中的函数 字符串处理函数 $(subst <from>;,<to>;,<text>;) 功能:把字串<text>;中的<from>;字符串替换成<to>;。 $(patsubst <pattern>;,<replacement>;,<text>;) 将<text>中和<pattern>模式匹配的换成<replacement>,可用通配符%表示任意长度字符串 $(strip <string>;) 去掉<string>;字串中开头和结尾的空字符。 $(findstring <find>;,<in>;) 在字串<in>;中查找<find>;字串。如果找到,那么返回<find>;,否则返回空字符串 $(filter <pattern...>;,<text>;) 以<pattern>;模式过滤<text>;字符串中的单词,保留符合模式<pattern>;的单词。 $(sort <list>;) 给字符串<list>;中的单词排序(升序)。 $(words <text>;) 统计<text>;中字符串中的单词个数。 $(wordlist <s>,<e>,<text>) 从字符串<text>;中取从<s>开始到<e>的单词串 $(firstword <text>;) 返回字符串<text>;的第一个单词。

Makefile中的语法 Makefile中的函数 文件名操作函数 $(dir <names...>;) $(notdir <names...>;) 从文件名序列<names>中取出非目录部分。非目录部分是指最后一个反斜杠(“/”)之后的部分。 $(suffix <names...>;) 从文件名序列<names>;中取出各个文件名的后缀 $(basename <names...>;) 从文件名序列<names>;中取出各个文件名的前缀部分 $(addsuffix <suffix>;,<names...>;) 把前缀<prefix>;加到<names>;中的每个单词后面。 $(join <list1>;,<list2>;) 把<list2>;中的单词对应地加到<list1>;的单词后面 循环处理函数 $(foreach <var>;,<list>;,<text>;) 把参数<list>;中的单词逐一取出放到参数<var>;所指定的变量中,然后再执行<text>; 所包含的表达式。

Makefile中的语法 Makefile中的函数 reverse = $(2) $(1) call 函数 $(call <expression>;,<parm1>;,<parm2>;,<parm3>;...) 你可以写一个非常复杂的表达式,这个表达式中可以定义许多参数,然后你可以用call函数来向这个表达式传递参数。<expression>;中用$(1),$(2),$(3)代替传入的参数 shell 函数 $(shell <Command>) shell函数也不像其它的函数。顾名思义,它的参数应该就是操作系统Shell的命令。 它和反引号“`”是相同的功能。 其他函数 $(wildcard PATTERN) 模式匹配函数,返回符合通配符PATTERN的字符串。 reverse = $(2) $(1) foo = $(call reverse,a,b) files := $(shell echo *.c) SRC_FILE = $(wildcard ./*.c)

如何让依赖关系的自动化 依赖关系的自动化 在Makefile中,依赖关系可能会需要包含一系列的头文件,在加入或删除头文件时,也需要小心地修改Makefile,这是一个很没有维护性的工作,下面介绍一种能自动生成依赖关系的方法 大多数的C/C++编译器都支持一个“-M”的选项,即自动找寻源文件中包含的头文件,并生成一个依赖关系。 如果使用的是GNU编译器,最好使用-MM,否则-M会把标准库的头文件列出来。 cc -M main.c 其输出是: main.o : main.c defs.h

如何让依赖关系的自动化 依赖关系的自动化 编译器的这个功能如何与我们的Makefile联系在一起呢? GNU组织建议把编译器为每一个源文件的自动生成的依赖关系放到一个文件中,为每一个“name.c”的文件都生成一个“name.d”的Makefile文件,[.d]文件中就存放对应[.c]文件的依赖关系。 于是,我们可以写出[.c]文件和[.d]文件的依赖关系,并让make自动更新或自成[.d]文件,并把其包含在我们的主Makefile中。 删除现有.d文件 $(DEPS_FILE) : %.d: %.c @set -e; rm -f $@; \ $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$ Sinclude $(DEPS_FILE) 通过CC –M生成自动依赖关系 将.d文件(依赖文件)放到目标侧

Makefile的运行 Make命令简介 Makefile的运行是由make命令来完成的,下面说明一下make命令。 make [-f makefile文件名][选项][宏定义][目标] Make的默认的文件名是makefile,Makefile 默认的目标是all “-C <dir>”:指定makefile的目录 “-f=<file>”:指定makefile文件名 ”-i“:在执行时忽略所有的错 “-n”:仅输出执行过程中的命令序列,但并不执行 “-p”:输出makefile中的所有数据,包括所有的规则和变量

实践应用举例 题目 当前目录下源文件的依赖关系如下图所示,写makefile将其编译成test 。 Def1.h Def2.h Def3.h Main.c F1.c F2.c Main.o F1.o F2.o Main

实践应用举例 makefile1 优点:结构清晰 缺点 文件数多时工作量很大;每增加一个文件,修改量大。 文件的依赖关系由开发人员判断,存在遗漏。 test : main.o f1.o f2.0 cc -o test main.o f1.o f2.0 main.o : main.c def1.h cc -c main.c f1.o : f1.c def1.h def2.h cc -c f1.c f2.o : f2.c def2.h def3.h cc -c f2.c

实践应用举例 Makefile2 使用变量 优点:与makefile1比较,增删文件时,只需要修改一处地方 缺点 文件的依赖关系只有.c文件的依赖,如果出现了头文件的修改可能需要clean后再编译 OBJECTS = main.o f1.o f2.0 test : $(OBJ_FILE) cc -o $@ $(OBJ_FILE) (OBJ_FILE) : %o : %c cc -c $<

实践应用举例 优点: 不管多少文件,makefile不需要扩展 增加删除文件时,不需要修改makefile 缺点 文件的依赖关系只有.c文件的依赖,如果出现了头文件的修改可能需要clean后再编译 SRC_FILE = $(wildcard ./*.c) OBJ_FILE = $(patsubst %.c, %.o, $(SRC_FILE)) test : $(OBJ_FILE) cc -o $@ $(OBJ_FILE) (OBJ_FILE) : %o : %c cc -c $<

实践应用举例 Makefile4 引入自动依赖 优点: 不管怎么修改、增删源文件都不需要修改makefile SRC_FILE = $(wildcard ./*.c) OBJ_FILE = $(patsubst %.c, %.o,$(SRC_FILE)) DEPS_FILE = $(patsubst %.c, %.d, $(SRC_FILE)) test : $(OBJECTS) cc -o $@ $(OBJ_FILE) (OBJ_FILE) : %o : %c cc -c $< $(DEPS_FILE) : %.d: %.c @set -e; rm -f $@; \ $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$ Sinclude $(DEPS_FILE) 优点: 不管怎么修改、增删源文件都不需要修改makefile 实现了自动依赖,makefile能自动识别需要编译的文件

Copyright © 2018 版权所有 东软集团