前言

本文通过几个简略的示例,能够疾速理解Makefile的根本应用办法,实用于编译咱们平时练习所编写的小量代码。

1. make命令

Makefile文件内容: all为<font color='green'>指标</font>,这里没有<font color='green'>依赖</font>的文件,这条<font color='green'>命令</font>是打印(echo)出“Hello Makefile”这行文字

all:     echo "Hello Makefile"

运行make后,终端打印的内容

$ makeecho "Hello Makefile"Hello Makefile

能够看到,Makefile的命令也打印在了终端,要想不输入命令的内容,能够在命令后面加上@

make能够指定要生成的指标,如果不指定,则默认第一个指标,咱们将Makefile文件内容批改一下

all:     @echo "Hello Makefile"test:     @echo "Hello Test"

运行不同的命令,能够看到不同的打印信息

$ makeHello Makefile$ make allHello Makefile$ make testHello Test

2. 生成文件

假如当初有两个文件fun.c和main.c,须要利用Makefile生成一个可执行文件app。

fun.c的内容

#include <stdio.h>void fun(){    printf("This is fun()!\n");}

main.c的内容

extern void fun(); int main(){     fun();     return 0; }

Makefile的内容

all: main.o fun.o    gcc -o app main.o fun.omain.o : main.c     gcc -o main.o -c main.cfun.o : fun.c     gcc -o fun.o -c fun.cclean:    rm app main.o fun.o

当执行make命令后,终端会打印下列内容,并生成对应的app , main.o ,fun.o文件

gcc -o main.o -c main.cgcc -o fun.o -c fun.cgcc -o app main.o fun.o

3. 革除文件

仍旧是下面的Makefile和源文件,咱们输出make clean,就能够革除刚刚生成的3个文件。打印信息如下:

$ make cleanrm app main.o fun.o

如果Makfile目录中,有名为clean文件,make之后再执行make clean又会产生什么呢?

咱们输出touch clean产生一个空的文件,再执行make clean,察看景象

$ touch clean$ make clean$ make: 'clean' is up to date.

此时make揭示clean文件是最新的,而不是执行革除操作。

要解决这个问题,咱们就得引入伪指标。

伪指标

伪指标采纳".PHONY" 关键字来定义, 且必须是大写字母。批改一下下面的Makefile

.PHONY:cleanall: main.o fun.o    gcc -o app main.o fun.omain.o : main.c     gcc -o main.o -c main.cfun.o : fun.c     gcc -o fun.o -c fun.cclean:    rm app main.o fun.o

输出make clean,咱们会发现此时可能失常执行革除操作。

makefile内容的正文

在Makefile文件中,有些内容咱们须要写一下备注,或者临时不须要了,想正文掉,须要怎么操作呢。很简略,只须要在须要正文的那行后面加上#号即可,像上面这样

#这是的Makefile的正文#all: main.o fun.o.PHONY:cleanall: main.o fun.o    gcc -o app main.o fun.omain.o : main.c     gcc -o main.o -c main.cfun.o : fun.c     gcc -o fun.o -c fun.cclean:    rm app main.o fun.o

本文所介绍的Makefile,应酬几个文件的编译还能够,在理论的工程中,会有几十个、上百个文件。要是都一个个这样按文件名书写,效率太低,且不好保护。前面的文章,我将会介绍Makefile的变量和函数,利用它们,咱们的Makefile能够大大晋升效率,且便于保护。