linux的makefile文件如何编译,Linux Makefile编写 详述

我之前总结了gcc的用法,那么在实际工作中,每次用gcc会很麻烦,尤其是一些大型项目,有很多的目录结构,这个时候我们就需要编写Makefile文件,然后在实际工作中,用make来编译大型的项目,相信搞过Android开发的一定对make,make install,make clean不陌生,分别是编译,安装和清理,下面我就用一个例子来说明Makefile怎么编写,还是上一讲的三个文件

func1.c

ae4568895122605c7f52d52925481c04.png

func2.c

d2fd36abfe59c93d77b4a5b748770ae4.png

main.c

5a80569682a65dfe87faf276f6f7ab59.png

来看一个简单的Makefile

45d76d8dbb4a4799eb9b2c0c92424b78.png

Makefile的基本规则:

目标:依赖文件

执行程序

注意,执行程序前面要用tab键

还有Makefile只会认第一个总的目标,其他都是配合的目标

这里我们的目标就是生成main,那么需要依赖func1.o func2.o main.o

gcc -o main func1.o func2.o main.o 就是执行程序

下面再分别写目标func1.o func2.o main.o

.PHONY:clean

clean:

rm -rf main func1.o func2.o main.o

这是一个伪目标,后面不跟依赖,目的只是执行后面的执行程序,当我们执行make clean时,就会执行rm命令,把生成的一些中间文件都删除掉

好了,我们执行make,执行make就会去寻找Makefile,跟进里面的配置来执行

cd14cd9ce6dbebd69f2d6c8511c75f53.png

9e50f6821dcfdd5e9844ba2fc18d4031.png

然后我们来执行主程序

0da7262a1fbddab1cb390e23a29c1b38.png

然后执行make clean

4330d3c47e0f4127e8d35735ad266b1e.png

Makefile有一个好处,比如修改了其中某一个文件,重新make的时候,只会重新编译修改的文件,其他文件不会编译

比如我们什么都不改,再执行make

b9b3a39a5e46c77b31ecf4cf8dbf2bfa.png

比如我们现在修改下main.c,再make

c09b33ed5a07dbd5644ac023ee199cf2.png

我们看到func1.c和func2.c没有被重新编译,这也是用make的好处

一个简单的Makefile就是这样,下面我们来说下变量,我们可以在Makefile中定义变量,看下面的Makefile文件

bffa9a22c70fdc053d8b1d03dd74b34e.png

我们定义了一个变量,object,接下来所有用到依赖的地方都用这个变量替换

我们还可以把条件判断加进来

d1606c803a9259f30bd39b94f553e53c.png

很简单,不多说了

再说两个变量

$@:代表目标文件

$^:代表所有的依赖

刚才的程序还可以这样改

066337ff927485d65b61dcdeba50584a.png

我们注意到在执行make的时候,执行程序都会输出,如果不想看到输出,可以在执行程序前面加一个@ 符号

2ae2ca3cbe9f70427bb896063f47b6de.png

其实我们还可以定义install的伪目标,一般这个命令就是把生成的可执行文件,复制到/usr/local下

有的时候,我们的Makefile不是真正的编译文件,而是包含的另外一个文件,那么就会去寻找另外一个文件,再编译,我们看下android源码跟目标的Makefile

519fec5b4b0687ace165cc8b49d1cad2.png

那么其实我们也可以这样做,我们把Makefile改名为android.mk,然后新建一个Makefile

b5d19071cc4551d643b6553fa5433feb.png

1d8ff90cd64548fd27e6038200ca1c45.png

其实Makefile的规则远远不止这些,我这只是总结了一些简单的,如果想了解更多的,大家去官网查即可

好了,Linux Makefile编写就总结到这里,如有问题,欢迎指正,谢谢。

0b1331709591d260c1c78e86d0c51c18.png

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值