Makefile的实例讲解

makefile,顾名思义,它的作用是来生成文件的。makefile可以对源代码进行管理,可以完成编译,链接,执行等阶段。当编写完成后,在终端执行make命令就可以执行makefile文件中的行为,一键完成编译,链接,执行等操作。非常的方便。makefile有自己的文件规则,它可以定义和使用变量,他也有自己的赋值语句,可以使用函数,可以执行shell命令,makefile是向下依赖的,也就是说,写在最后的最先执行,然后一级一级往上执行。Windows下的好多编译器都帮我们写好了makefile,不用开发人员自己写,但是如果你想做一个合格的程序员,想完成大型项目,你就需要了解makefile,本文的代码是在ubuntu下编写的。

makefile的规则(请注意底下那段话)

target ... : prerequisites ...
command
...
...
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)

下面我们来看一个makefile文件:

SRC = main.cpp
CC = g++

test:test.o
        ./test.o

test.o:$(SRC)
        $(CC) $(SRC) -o test.o
clean:
        rm -rf *.o test.o


上面就是一个makefile的例子。


第1,2行,先定义两个变量SRC和CC,并分别给他们赋值。

第4行,test是一个标签。这个标签依赖test.o,当这个标签被调用,就执行test.o

第5行,./test.o是shell的命令,表示执行test.o这个可执行文件。在./test.o之前是一个制表符,在makefile中,写命令时要在命令之前写个制表符。

第7行,在第4行,test标签依赖一个test.o,test.o从哪来呢,所以在这一行,就指明了test.o的生成需要哪些文件,这里写了个$(SRC),是什么意思呢,SRC是我们在第一行定义的变量,这里引用了这个变量,$(SRC)就被替换成main.cpp,所以test.o生成需要main.cpp。makefile的变量有点像C语言中的宏。

第8行,在第7行,写了test.o的生成需要main.cpp,但是main.cpp又怎么生成test.o呢,所以在这一行,就由main.cpp生成test.o。行的开头以制表符开头,说明本行也是执行命令的,该行展开后是这样子的:g++ main.cpp -o test.o 该命令是调用g++编译器,将main.cpp生成test.o

第9行,定义一个名为clean的标签没有依赖文件。

第10行,写了clean标签被调用的时候,执行的shell命令。该命令的作用是清除Makefile所在的目录下的所有后缀为.o的文件。


我们在终端上执行:

make test

make命令就会找当前目录下的makefile文件,并调用test标签,完成编译,链接,执行的操作。

如果执行:

make clean

make就会执行clean标签,清除Makefile所在的目录下的所有后缀为.o的文件。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值