欢迎来到天天文库
浏览记录
ID:41869092
大小:563.50 KB
页数:14页
时间:2019-09-04
《7.Linux编程工具(二)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第七章Linux编程工具(二)本章目标Makefile工具编写简单的makefile文件Makefile自动化变量多级目录编译方法make工具人们通常利用make工具来自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。Makefilemake工具通过一个称为makefile的文件来完成并自动维护编译工作。makefile需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖
2、关系。当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。Makefile基本规则TARGET…:DEPENDENCIES…COMMAND…目标(TARGET)程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。依赖(DEPENDENCIES)是用来产生目标的输入文件,一个目标通常依赖于多个文件。Makefile基本规则命令(COMMAND)是make执行的动作,一个可以有多个命令,每个占一行。注意:每个命令行的起始字符必须为TAB字符!如果DEPENDENCIES中有一个或多个文件更新的话,CO
3、MMAND就要执行,这就是Makefile最核心的内容最简单的Makefile例子main:main.oadd.osubtract.ogccmain.oadd.osubtract.o-omainmain.o:main.cadd.hsubtract.hgcc-cmain.c-omain.oadd.o:add.cadd.hgcc-cadd.c-oadd.osubtract.o:subtract.csubtract.hgcc-csubtract.c-osubtract.oclean:rm-fmainmain.oadd.osubtract.oMakefile自动化变量选项名作
4、用$@规则的目标文件名$<规则的第一个依赖文件名$^规则的所有依赖文件列表请演示更复杂的makefile常见伪目标.PHONYallinstallcleanMakefile中常见函数wildcard函数当前目录下匹配模式的文件例如:src=$(wildcard*.c)notdir函数去除路径例如:$(notdir$src)patsubst函数模式匹配替换例如:$(patsubst%.c,%.o,$src)等价于$(src:.c=.o)shell函数执行shell命令例如:$(shellls–d*/)多级目录Makefile(1)在顶层目录中编写一个MakefileCC
5、=gccSUBDIR=$(shellls–d*/)ELF=mainROOTSRC=$(wildcard*.c)ROOTOBJ=$(ROOTSRC:%.c=%.o)SUBSRC=$(shellfind$(SUBDIR)-name'*.c')SUBOBJ=$(SUBSRC:%.c=%.o)$ELF:$(ROOTOBJ)$(SUBOBJ)$(CC)-o$(ELF)$(ROOTOBJ)$(SUBOBJ).c.o:echo$(@D)$(6、级目录Makefile(2)在各子目录分别编写Makefileinclude各子目录makefileincludemakefile文件名进入各目录进行makemake–C目录名多个makefile间传递变量值export变量名总结VI工具使用Gcc编译原理Gdb调试程序方法Linux库文件和头文件Makefile工具编写简单的makefile文件课后练习封装链表模块模块中涵盖链表的初始化、增删改节点、链表释放功能将链表模块封装成共享库编写测试程序,完成链表共享库的调用和功能验证,并编写Makefile(编译、安装install、清除编译结果clean)
6、级目录Makefile(2)在各子目录分别编写Makefileinclude各子目录makefileincludemakefile文件名进入各目录进行makemake–C目录名多个makefile间传递变量值export变量名总结VI工具使用Gcc编译原理Gdb调试程序方法Linux库文件和头文件Makefile工具编写简单的makefile文件课后练习封装链表模块模块中涵盖链表的初始化、增删改节点、链表释放功能将链表模块封装成共享库编写测试程序,完成链表共享库的调用和功能验证,并编写Makefile(编译、安装install、清除编译结果clean)
此文档下载收益归作者所有