makefile入门-教学讲解课件_第1页
makefile入门-教学讲解课件_第2页
makefile入门-教学讲解课件_第3页
makefile入门-教学讲解课件_第4页
makefile入门-教学讲解课件_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MAKEFILE入门MAKEFILE入门1提纲什么是makefile分析一个简单的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的提纲什么是makefile2什么是makefile程序的基本编译过程makefile的作用分析一个简单的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的什么是makefile3程序的基本编译过程基本编译过程:源文件→目标文件(.o)→链接成一个可执行程序(elf)在linux下的实现:1、编写源文件2、使用g++来进行编译: a)如果只有一个文件(c/cpp文件),直接可以编译: g++helloworld.cpp-ohelloworld b)如果需要多个文件链接,则先编译成.o文件,再进行链接 g++-ca.cpp-oa.og++-cb.cpp-ob.o g++a.ob.o-oexefile程序的基本编译过程基本编译过程:4每次编译都要敲那么多命令,很麻烦,所以将这些命令写到makefile里。Make命令会去读makefile,然后自动去执行所有的编译过程,并将结果返回。在大型的项目中,源文件的组成是很复杂的,所以需要makefile来多整个项目进行编译。Linux有各种各样的发行版本,有些库并不通用,所以会使用automake的一系列工具来检查当前的系统是否可以对该项目进行编译。Makefile的作用每次编译都要敲那么多命令,很麻烦,所以将这些命令写到make5什么是makefile分析一个简单的makefilemakefile的基本结构helloworld的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的什么是makefile6target:prerequisites commandTarget通常称作目标。它是一个目标文件,可以是ObjectFile,也可以是执行文件。还可以是一个标签(Label)。Prerequisites通常称作依赖。就是要生成那个target所依赖的文件或是目标。command也就是make需要执行的命令。(任意的Shell命令,前面一定是一个tab键)Makefile的基本结构target:prerequisitesMakefil7target:prerequisites command这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是:prerequisites中如果有文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。Makefile的基本结构target:prerequisitesMakefil8target:prerequisites command注意:Command前是一个tab键helloworld:hello.cpp g++hello.cpp-ohellowdhelloworld的makefiletarget:prerequisiteshellowo9什么是makefile分析一个简单的makefileMakefile中经常用到的知识容易忽略的问题伪目标隐式规则我们常用的makefile是如何组成的什么是makefile10包含库的时候要去掉lib前缀。如要包含libcomm,则需要这样来写:-L$(PATH)/lib–lcomm如果是只编译不链接,请注意要加参数-ctarget...:prerequisites... command 中的command可以是任意的shell命令。但在Makefile中的命令,必须要以[Tab]键开始。在编写makefile中请记住环境变量的存在。可以使用env命令来显示当前环境变量的值。容易忽略的问题包含库的时候要去掉lib前缀。如要包含libcomm,则需要11经常见到的makeclean其实是通过makefile中的一个clean目标实现的。但如果源文件中有一个clean的代码文件,就一定会真存在一个clean目标,这样就和清除命令混在一起了。为了避免和文件重名的这种情况,我们可以使用一个特殊的标记“.PHONY”来显示地指明一个目标是“伪目标”,向make说明,不管是否有这个文件,这个目标就是“伪目标”。如:.PHONY:cleanclean:rm*.otemp伪目标经常见到的makeclean其实是通过makefile中的12看如下的一个编译规则:%.o:%.c$(CC)-c$(CFLAGS)$(CPPFLAGS)$<-o$@%.o(目标,target):%.c(依赖,prerequisites)是表示把所有的[.c]文件都编译成[.o]文件;$<是每次匹配到的那个依赖文件$@是每次匹配到的那个目标文件隐式规则看如下的一个编译规则:隐式规则13什么是makefile分析一个简单的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的m:通用库调用路径makefile:编译使用的文件什么是makefile14“-I”:定义了你自己的头文件的存储目录。“-L”:定义了你自己的库文件存放目录。Make中可以定义变量,直接赋值就可以了: ARPS_ROOT=/home/yedeng/arps引用变量使用$(APRS_ROOT),make会自动进行替换。将$(APRS_ROOT)用“/home/yedeng/arps”来代替。实际看我们用的一个m:打开文件m:通用库调用路径“-I”:定义了你自己的头文件的存储目录。makefile15在Makefile使用include关键字可以把别的Makefile包含进来,这很像C语言的#include,被包含的文件会原模原样的放在当前文件的包含位置。Makefile中还可以使用一些函数:$(patsubst<pattern>,<replacement>,<text>):模式字符串替换函数。功能:查找<text>中的单词是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。

$(wildcardPATTERN...):保持通配符有效。 功能:在规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”。makefile:编译使用的文件一在Makefile使用include关键字可以把别的Make16:=和=的区别:AAA=abcd

BBB=$(AAA)

CCC:=$(AAA)

AAA=cdef

此时,(BBB)为cdef(跟随AAA变化)。$(CCC)

为abcd(不随AAA变化)。

在Makefile还可以使用shell命令:

CurrDir:=$(shellbasename`pwd`)分析我们现在使用的一个makefile:打开文件makefile:编译使用的文件二:=和=的区别:makefile:编译使用的文件二17提纲什么是makefile分析一个简单的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的提纲什么是makefile18什么是makefile程序的基本编译过程makefile的作用分析一个简单的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的什么是makefile19什么是makefile分析一个简单的makefilemakefile的基本结构helloworld的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的什么是makefile20什么是makefile分析一个简单的makefileMakefile中经常用到的知识容易忽略的问题伪目标隐式规则我们常用的makefile是如何组成的什么是makefile21什么是makefile分析一个简单的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的m:通用库调用路径makefile:编译使用的文件什么是makefile22Q&A谢谢!Q&A谢谢!MAKEFILE入门MAKEFILE入门24提纲什么是makefile分析一个简单的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的提纲什么是makefile25什么是makefile程序的基本编译过程makefile的作用分析一个简单的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的什么是makefile26程序的基本编译过程基本编译过程:源文件→目标文件(.o)→链接成一个可执行程序(elf)在linux下的实现:1、编写源文件2、使用g++来进行编译: a)如果只有一个文件(c/cpp文件),直接可以编译: g++helloworld.cpp-ohelloworld b)如果需要多个文件链接,则先编译成.o文件,再进行链接 g++-ca.cpp-oa.og++-cb.cpp-ob.o g++a.ob.o-oexefile程序的基本编译过程基本编译过程:27每次编译都要敲那么多命令,很麻烦,所以将这些命令写到makefile里。Make命令会去读makefile,然后自动去执行所有的编译过程,并将结果返回。在大型的项目中,源文件的组成是很复杂的,所以需要makefile来多整个项目进行编译。Linux有各种各样的发行版本,有些库并不通用,所以会使用automake的一系列工具来检查当前的系统是否可以对该项目进行编译。Makefile的作用每次编译都要敲那么多命令,很麻烦,所以将这些命令写到make28什么是makefile分析一个简单的makefilemakefile的基本结构helloworld的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的什么是makefile29target:prerequisites commandTarget通常称作目标。它是一个目标文件,可以是ObjectFile,也可以是执行文件。还可以是一个标签(Label)。Prerequisites通常称作依赖。就是要生成那个target所依赖的文件或是目标。command也就是make需要执行的命令。(任意的Shell命令,前面一定是一个tab键)Makefile的基本结构target:prerequisitesMakefil30target:prerequisites command这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是:prerequisites中如果有文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。Makefile的基本结构target:prerequisitesMakefil31target:prerequisites command注意:Command前是一个tab键helloworld:hello.cpp g++hello.cpp-ohellowdhelloworld的makefiletarget:prerequisiteshellowo32什么是makefile分析一个简单的makefileMakefile中经常用到的知识容易忽略的问题伪目标隐式规则我们常用的makefile是如何组成的什么是makefile33包含库的时候要去掉lib前缀。如要包含libcomm,则需要这样来写:-L$(PATH)/lib–lcomm如果是只编译不链接,请注意要加参数-ctarget...:prerequisites... command 中的command可以是任意的shell命令。但在Makefile中的命令,必须要以[Tab]键开始。在编写makefile中请记住环境变量的存在。可以使用env命令来显示当前环境变量的值。容易忽略的问题包含库的时候要去掉lib前缀。如要包含libcomm,则需要34经常见到的makeclean其实是通过makefile中的一个clean目标实现的。但如果源文件中有一个clean的代码文件,就一定会真存在一个clean目标,这样就和清除命令混在一起了。为了避免和文件重名的这种情况,我们可以使用一个特殊的标记“.PHONY”来显示地指明一个目标是“伪目标”,向make说明,不管是否有这个文件,这个目标就是“伪目标”。如:.PHONY:cleanclean:rm*.otemp伪目标经常见到的makeclean其实是通过makefile中的35看如下的一个编译规则:%.o:%.c$(CC)-c$(CFLAGS)$(CPPFLAGS)$<-o$@%.o(目标,target):%.c(依赖,prerequisites)是表示把所有的[.c]文件都编译成[.o]文件;$<是每次匹配到的那个依赖文件$@是每次匹配到的那个目标文件隐式规则看如下的一个编译规则:隐式规则36什么是makefile分析一个简单的makefileMakefile中经常用到的知识我们常用的makefile是如何组成的m:通用库调用路径makefile:编译使用的文件什么是makefile37“-I”:定义了你自己的头文件的存储目录。“-L”:定义了你自己的库文件存放目录。Make中可以定义变量,直接赋值就可以了: ARPS_ROOT=/home/yedeng/arps引用变量使用$(APRS_ROOT),make会自动进行替换。将$(APRS_ROOT)用“/home/yedeng/arps”来代替。实际看我们用的一个m:打开文件m:通用库调用路径“-I”:定义了你自己的头文件的存储目录。makefile38在Makefile使用include关键字可以把别的Makefile包含进来,这很像C语言的#include,被包含的文件会原模原样的放在当前文件的包含位置。Makefile中还可以使用一些函数:$(patsubst<pattern>,<replacement>,<text>):模式字符串替换函数。功能:查找<text>中的单词是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。

$(wildcardPATTERN...):保持通配符有效。 功能:在规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”。makefile:编译使用的文件一在Makefile使用include关键字可以把别的Make39:=和=的区别:AAA=abcd

BB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论