最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

全球播报:轻松玩转Makefile | 基础用法

来源:博客园

前言

本文通过几个简单的示例,可以快速了解Makefile的基本使用方法,适用于编译我们平时练习所编写的小量代码。


(资料图片)

1. make命令

Makefile文件内容: all为目标,这里没有依赖的文件,这条命令是打印(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 void fun(){printf("This is fun()!\n");}

main.c的内容

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

Makefile的内容

all: main.o fun.ogcc -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.ogcc -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.ogcc -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可以大大提升效率,且便于维护。

关键词: 打印信息 可执行文件 需要怎么