java hadoop makefile_实例学习写Makefile文件

目录

0. 扫盲

1. 编译,链接

2. Makefile文件执行

3. Makefile书写规则

4. 案例

5. Makefile是如何工作的

6. 拔高,参考

0. 扫盲

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员(是不是夸张了点,别人说的)。

什么是makefile文件?它是一个指挥文件,指挥着源文件编译的先后顺序,以及如何链接在一起。

1. 编译,链接

c6dda7d833f747564d13d21e1a02f7bc.png

2. Makefile文件执行

写好Makefile(或写成makefile)文件后,直接执行命令make,编译器会自动执行makefile里的命令,进行编译、链接知道生成最终可以执行的文件。即

make

3. Makefile书写规则

target : objects

command

其中

target是可以是目标文件(.o)也可以是可执行文件,还可以是个标签(最后说)

objects是生成target依赖的文件

command是make要执行的文件(可以是任意Shell命令)

特殊字符:$@:目标文件,$^:所有的依赖文件,$

4. 案例

假设文件的关系如下图

836a5cae55d033577cb7be433e5cf8e6.png

写法1

main2 : main2.o sum.o hello.o

g++ -o main2 main2.o sum.o hello.o

main2.o : main2.cc sum.h

g++ -c main2.cc

sum.o : sum.cc sum.h hello.h

g++ -c sum.cc

hello.o : hello.cc hello.h

g++ -c hello.cc

参数 -o 后面是可执文件; -c后面是待编译的文件。在前两行中写了很多重复的.o文件,可以把它集合起来,用变量表示,如下:

写法2

objects = main2.o sum.o hello.o

main2 : $(objects)

g++ -o main2 $(objects)

main2.o : main2.cc sum.h

g++ -c main2.cc

sum.o : sum.cc sum.h hello.h

g++ -c sum.cc

hello.o : hello.cc hello.h

g++ -c hello.cc

GUN的make相当强大,它可以自动推导文件集文件依赖关系,写法如下:

写法3

objects = main2.o sum.o hello.o

main2 : $(objects)

g++ -o main2 $(objects)

main2.o : sum.h

sum.o : sum.h hello.h

hello.o : hello.h

文件执行完了以后生成很多.o文件,能不能可以删除掉,可以的,写上命令(例如clean),下面是执行的操作,例如:

写法4

objects = main2.o sum.o hello.o

main2 : $(objects)

g++ -o main2 $(objects)

main2.o : sum.h

sum.o : sum.h hello.h

hello.o : hello.h

clean:

rm *.o

这样执行 make clean,就会执行rm *.o 删除所有的.o文件,即

make clean

5. Makefile如何工作的?

输入make后,会在目录找Makefile、makefile

如果找到,它会在文件中找到第一个目标文件(例子中的main2)作为最终的目标文件

如果main2不存在,就依靠后边的.o文件生成

如果后边的.o不存在,就利用下边的g++ -c 生成

.o文件都够了,就链接生成最终的目标文件

6. 拔高,参考

跟我一起写Makefile-陈皓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值