继续备课,复习makefile的基础知识
Makefile 是由 make 命令引用的文本文件,它描述了目标的构建方式,并包含诸如源文件级依赖关系以及构建顺序依赖关系之类的信息。
makefile基本结构
makefile的基本结构包括三个部分
makefile
target ... : prerequisites ...
[TAB]command
target
可以是一个object file(目标文件),也可以是一个执行文件,还可以是一个标签(label)
prerequisites
生成该target所依赖的文件或target
command
生成target需要执行的命令,一般为
shell
命令,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。
注意:command前面的TAB是必须的
makefile基本示例
首先在一个目录下新建,main.c
,func1.c
,func1.h
三个文件。其中main.c
文件依赖于func1.c
文件中的func1
函数。在目录中新建一个makefile
,写入如下内容。
makefile
all: main.o func1.o
gcc -o main1 func1.o main.o
main.o: main.c
gcc -c main.c
func1.o: func1.c func1.h
gcc -c func1.c
clean:
rm -rf *.o
在终端cd
进入目录之后,执行make
命令就可以将直接编译出可执行文件main1
。
也可以手动执行make all
指令指定生成,当没有为make
指定生成的target 时,则默认选择第一个target。
使用 make clean
可以删除编译中生成的.o
结尾的中间文件。
makefile中的变量
可以看到虽然上一节中使用makefile
简化了编译所输入的命令,但是所编写的 makefile
中含有很多 .o
结尾的prerequisites,当所依赖的文件过多时,makefile
就会变的非常复杂,为了进一步简化书写,可以使用变量简化makefile
。
makefile
objects = main.o kbd.o command.o
all : $(objects)
gcc -o edit $(objects)
main.o : main.c defs.h
gcc -c main.c
kbd.o : kbd.c defs.h command.h
gcc -c kbd.c
command.o : command.c defs.h command.h
gcc -c command.c
clean :
rm edit $(objects)