资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
第9页 / 共23页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
MAKEFILE入门广告平台与产品部 Zackyang 2008-02-02提纲 什么是makefile 分析一个简单的makefile Makefile中经常用到的知识 我们常用的makefile是如何组成的 什么是makefile 程序的基本编译过程 makefile的作用分析一个简单的makefile Makefile中经常用到的知识 我们常用的makefile是如何组成的程序的基本编译过程 基本编译过程: 源文件目标文件(.o)链接成一个可执行程序(elf) 在linux下的实现: 1、编写源文件 2、使用g+来进行编译: a)如果只有一个文件(c/cpp文件),直接可以编译: g+ helloworld.cpp -o helloworld b)如果需要多个文件链接,则先编译成.o文件,再进行 链接 g+ -c a.cpp -o a.o g+ -c b.cpp -o b.o g+ a.o b.o -o exefile 每次编译都要敲那么多命令,很麻烦,所以将这些 命令写到makefile里。Make命令会去读makefile,然后 自动去执行所有的编译过程,并将结果返回。 在大型的项目中,源文件的组成是很复杂的,所以 需要makefile来多整个项目进行编译。 Linux有各种各样的发行版本,有些库并不通用,所 以会使用automake的一系列工具来检查当前的系统是 否可以对该项目进行编译。Makefile的作用什么是makefile 分析一个简单的makefile makefile的基本结构 helloworld的makefileMakefile中经常用到的知识 我们常用的makefile是如何组成的target : prerequisites command Target通常称作目标。它是一个目标文件,可以是 Object File,也可以是执行文件。还可以是一个标签 (Label)。 Prerequisites通常称作依赖。就是要生成那个target 所依赖的文件或是目标。 command也就是make需要执行的命令。(任意的 Shell命令,前面一定是一个tab键)Makefile的基本结构target : prerequisites command 这是一个文件的依赖关系,也就是说,target这一个或 多个的目标文件依赖于prerequisites中的文件,其生成 规则定义在command中。说白一点就是:prerequisites 中如果有文件比target文件要新的话,command所定义 的命令就会被执行。这就是Makefile的规则。也就是 Makefile中最核心的内容。Makefile的基本结构target : prerequisites command 注意:Command前是一个tab键 helloworld: hello.cpp g+ hello.cpp -o hellowdhelloworld的makefile什么是makefile 分析一个简单的makefile Makefile中经常用到的知识 容易忽略的问题 伪目标 隐式规则 我们常用的makefile是如何组成的 包含库的时候要去掉lib前缀。如要包含libcomm, 则需要这样来写:-L$(PATH)/lib lcomm 如果是只编译不链接,请注意要加参数-c target . : prerequisites . command 中的command可以是任意的shell命令。但在 Makefile中的命令,必须要以Tab键开始。 在编写makefile中请记住环境变量的存在。可以使 用env命令来显示当前环境变量的值。容易忽略的问题 经常见到的make clean其实是通过makefile中的一个clean目标 实现的。 但如果源文件中有一个clean的代码文件,就一定会真存在一 个clean目标,这样就和清除命令混在一起了。 为了避免和文件重名的这种情况,我们可以使用一个特殊的 标记“.PHONY”来显示地指明一个目标是“伪目标”,向make说 明,不管是否有这个文件,这个目标就是“伪目标”。如: .PHONY: cleanclean:rm *.o temp 伪目标 看如下的一个编译规则: %.o : %.c$(CC) -c $(CFLAGS) $(CPPFLAGS) $,) :模式字符串替换函 数。功能:查找中的单词是否符合模式,如果匹配的话,则以替换。 $(wildcard PATTERN.) :保持通配符有效。 功能:在规则中,通配符会被自动展开。但在变量的定义 和函数引用时,通配符将失效。这种情况下如果需要通配符有效, 就需要使用函数“wildcard”。makefile:编译使用的文件一 :=和=的区别:AAA=abcd BBB=$(AAA) CCC:=$(AAA) AAA=cdef 此时,(BBB) 为 cdef (跟随AAA变化)。$(CCC) 为 abcd(不随AAA变化)。 在Makefile还可以使用shell命令:CurrDir := $(shell basename pwd) 分析我们现在使用的一个makefile:打开文件makefile:编译使用的文件二提纲 什么是makefile 分析一个简单的makefile Makefile中经常用到的知识 我们常用的makefile是如何组成的 什么是makefile 程序的基本编译过程 makefile的作用分析一个简单的makefile Makefile中经常用到的知识 我们常用的makefile是如何组成的什么是makefile 分析一个简单的makefile makefile的基本结构 helloworld的makefileMakefile中经常用到的知识 我们常用的makefile是如何组成的什么是makefile 分析一个简单的makefile Makefile中经常用到的知识 容易忽略的问题 伪目标 隐式规则 我们常用的makefile是如何组成的什么是makefile 分析一个简单的makefile Makefile中经常用到的知识 我们常用的makefile是如何组成的 makefile.comm:通用库调用路径 makefile:编译使用的文件Q&A谢谢!
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号