嵌入式开发教程之深入学习make命令和makefile(下)

嵌入式开发教程之深入学习make命令和makefile(下)

ID:32017885

大小:1.01 MB

页数:26页

时间:2019-01-30

嵌入式开发教程之深入学习make命令和makefile(下)_第1页
嵌入式开发教程之深入学习make命令和makefile(下)_第2页
嵌入式开发教程之深入学习make命令和makefile(下)_第3页
嵌入式开发教程之深入学习make命令和makefile(下)_第4页
嵌入式开发教程之深入学习make命令和makefile(下)_第5页
资源描述:

《嵌入式开发教程之深入学习make命令和makefile(下)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、嵌入式开发教程之深入学习Make命令和Makefile(下)简介一、构建多个目标二、内部规则三、后缀规则四、用make管理程序库五、Makefile和子目录六、GNUmake和gcc的有关选项七、小结make是Linux下的一款程序自动维护工具,配合makefile的使用,就能够根据程序中模块的修改情况,自动判断应该对那些模块重新编译,从而保证软件是由最新的模块构成。本文分为上下两部分,我们在上一篇文章中分别介绍了make和makefile的一些基本用法,在本文中,我们会对make和makefile的功能做进一步的介绍。简介有时候,我们想要在一个makefile中生成多个单独的目标文件,或

2、者将多个命令放在一起,比如,在下面的示例mymakefile3中我们将添加一个clean选项来清除不需要的目标文件,然后用install选项将生成的应用程序移动到另一个目录中去。这个makefile跟前面的mymakefile较为相似,不同之处笔者用黑体加以标识:all:main #使用的编译器CC=gcc #安装位置INSTDIR=/usr/local/bin #include文件所在位置INCLUDE=. #开发过程中所用的选项CFLAGS=-g-Wall–ansi一、嵌入式开发教程:构建多个目标#发行时用的选项#CFLAGS=-O-Wall–ansi main:main.of1.of

3、2.o $(CC)-omainmain.of1.of2.o main.o:main.cdef1.h $(CC)-I$(INCLUDE)$(CFLAGS)-cmain.c f1.o:f1.cdef1.hdef2.h $(CC)-I$(INCLUDE)$(CFLAGS)-cf1.c f2.o:f2.cdef2.hdef3.h $(CC)-I$(INCLUDE)$(CFLAGS)-cf2.c clean:嵌入式开发教程-rmmain.of1.of2.o install:main @if[-d$(INSTDIR)]; then cpmain$(INSTDIR); chmoda+x$(INST

4、DIR)/main; chmodog-w$(INSTDIR)/main; echo“Installedin$(INSTDIR)“; else echo“Sorry,$(INSTDIR)doesnotexist”; fi嵌入式开发教程在这个makefile中需要注意的是,虽然这里有一个特殊的目标all,但是最终还是将main作为目标。因此,如果执行make命令时没有在命令行中给出一个特定目标的话,仍然会编译连接main程序。其次要注意后面的两个目标:clean和install。目标clean没有依赖模块,因为没有时间标记可供比较,所以它总被执行;它的实际意图是引出后面的rm命令来删

5、除某些目标文件。我们看到rm命令以-开头,这时即使表示make将忽略命令结果,所以即使没有目标供rm命令删除而返回错误时,makeclean依然继续向下执行。接下来的目标install依赖于main,所以make知道必须在执行安装命令前先建立main。用于安装的指令由一些shell命令组成。嵌入式开发教程因为make调用shell来执行规则,并且为每条规则生成一个新的shell,所以要用一个shell来执行这些命令的话,必须添加反斜杠,以使所有命令位于同一个逻辑行上。这条命令用@开头,表示在执行规则前不会向标准输出打印命令。为了安装应用程序,目标install会一条接一条地执行若干命令,并

6、且执行下一个之前,不会检查上一条命令是否成功。若想只有当前面的命令取得成功时,随后的命令才得以执行的话,可以在命令中加入&&,如下所示:@if[-d$(INSTDIR)]; then cpmain$(INSTDIR)&& chmoda+x$(INSTDIR)/main&& chmodog-w$(INSTDIR/main&& echo“Installedin$(INSTDIR)“; else echo“Sorry,$(INSTDIR)doesnotexist”;false; fi嵌入式开发教程这是shell的“与”指令,只有当在前的命令成功时随后的命令才被执行。这里不必关心前

7、面命令是否取得成功,只需注意这种用法就可以了。要想在/usr/local/bin目录安装新命令必须具有特权,所以调用makeinstall命令之前,可以让Makefile使用一个不同的安装目录,或者修改该目录的权限,或切换到root用户。如下所示$rm*.omain$make-fMymakefile3 gcc-I.-g-Wall-ansi-cmain.c gcc-I.-g-Wall-ansi-cf1.c gcc-I.-g

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。