linux学习之makefile.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux学习之makefile

Makefile学习笔记 --- 杨洪涛 在Linux下编程,make 是个很重要的工具。它的作用就是通过解析Makefile 文件,构建和管理整个工程的编译和链接。所以每一个工程,我们都有投入一些时间去完成一个或者多个称之为 Makefile 文件的编写。Linux内核源代码就是个和好的例子。要想能更好的学习,编译内核,就要能看懂和更改他下面的Makefile文件。 一切从简单的开始,先来一个例子。分析一个简单的 Makefile,它对一个包含 8 个 C 的源代码和三个头文件的工程进行编译和链接。这个 Makefile 提供给了 make 必要的信息,make 程序根据 Makefile 中的规则描述执行相关的命令来完成指定的任务(如:编译、链接和清除编译过程文件等): objects = main.o kbd.o command.o display.o / insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h buffer.h cc -c display.c insert.o : insert.c defs.h buffer.h cc -c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc -c files.c utils.o : utils.c defs.h cc -c utils.c clean : rm edit $(objects) 上例的 Makefile,只要在命令行中输入make回车,这个工程就会被自动编译。edit就是这次make编译的最终目标,它由其中的8个c文件编译链接生成。文件一开头定义一个变量objects,它被赋值为main.o kbd.o command.o display.o insert.o search.o files.o utils.o这个字符串,下面的$(objects)就是对它的引用。cc -o edit $(objects) 就是编译链接这几个文件为最终可执行文件edit的命令(记住:命令行要用Tab键的空格开头),main.o : main.c defs.h 以及下面类似的语句,描述的是编译的规则和依赖关系,既:main.o目标文件是有main.c和def.h编译生成的,一下类似语句意义皆是如此。最后的 clean : rm edit $(objects) 。clean就相当与C语言中的lable,当在命令中输入make clean时。就会执行rm edit $(objects)语句。 总结一下make 是如何工作的: 1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。 3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。 4、如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。 5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生成make的终极任务,也就是执行文件edit了。 其实Makefile就是描述了这点东西,要编译生成的目标文件和生成目标的源文件的各自的生成的依赖关系,还要就是要执行的命令。 但是真正的项目工程往往是庞大的,各个模块已目录树的形式,组织在一起,它的编译链接非常复杂。每一个子目录有一个makefile文档,子目录makefile文档根据上级目录makefile文档命令启动编译,如linux的源代码。怎样把这些文件串在一起,就需要make中的变量定义如例子中的objects,文件包含如:includefilename,还有类似预编译#if的语句,和许多的函数来

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档