1、第七章 Linux编程工具(二),本章目标,Makefile工具 编写简单的makefile文件 Makefile自动化变量 多级目录编译方法,make工具,人们通常利用 make 工具来自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。,Makefile,make 工具通过一个称为 makefile 的文件来完成并自动维护编译工作。makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间
2、的依赖关系。当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。,Makefile基本规则,TARGET : DEPENDENCIES COMMAND 目标(TARGET)程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。 依赖(DEPENDENCIES)是用来产生目标的输入文件,一个目标通常依赖于多个文件。,Makefile基本规则,命令(COMMAND)是make执行的动作,一个可以有多个命令,每个占一行。注意:每个命令行的起始字符必须为TAB字符! 如果DEPENDENCIES中有一个或多个文件更新的话,COMMA
3、ND就要执行,这就是Makefile最核心的内容,最简单的Makefile例子,main:main.o add.o subtract.ogcc main.o add.o subtract.o -o main main.o:main.c add.h subtract.hgcc -c main.c -o main.o add.o:add.c add.hgcc -c add.c -o add.o subtract.o:subtract.c subtract.hgcc -c subtract.c -o subtract.o clean:rm -f main main.o add.o subtract.
4、o,Makefile自动化变量,请演示更复杂的makefile,常见伪目标.PHONY,allinstallclean,Makefile中常见函数,wildcard函数 当前目录下匹配模式的文件 例如:src=$(wildcard *.c) notdir函数 去除路径 例如:$(notdir $src) patsubst函数 模式匹配替换 例如:$(patsubst %.c,%.o,$src) 等价于$(src:.c=.o) shell函数 执行shell命令 例如:$(shell ls d */),多级目录Makefile(1),在顶层目录中编写一个Makefile,CC = gcc SUB
5、DIR=$(shell ls d */) ELF = main ROOTSRC=$(wildcard *.c) ROOTOBJ=$(ROOTSRC:%.c=%.o) SUBSRC=$(shell find $(SUBDIR) -name *.c) SUBOBJ=$(SUBSRC:%.c=%.o)$ELF:$(ROOTOBJ) $(SUBOBJ)$(CC) -o $(ELF) $(ROOTOBJ) $(SUBOBJ) .c.o:echo $(D) $(F) $(F)$(CC) -c $(D)/$(F) -o $(D)/$(F)clean:rm $(ELF) $(TOPOBJ) $(SUBOBJ)
6、,多级目录Makefile(2),在各子目录分别编写Makefile include各子目录makefileinclude makefile文件名 进入各目录进行make make C 目录名 多个makefile间传递变量值 export 变量名,总结,VI工具使用 Gcc 编译原理 Gdb调试程序方法 Linux库文件和头文件 Makefile工具 编写简单的makefile文件,课后练习,封装链表模块 模块中涵盖链表的初始化、增删改节点、链表释放功能 将链表模块封装成共享库 编写测试程序,完成链表共享库的调用和功能验证,并编写Makefile(编译、安装install、清除编译结果clean),