Skip to content

继续备课,复习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)

最新更新: