你好,游客 登录 注册 搜索
背景:
阅读新闻

Linux Makefile编写 详述

[日期:2016-11-24] 来源:Linux社区  作者:swjtufq [字体: ]

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

func2.c
Linux Makefile编写

main.c
Linux Makefile编写

来看一个简单的Makefile
Linux Makefile编写

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,跟进里面的配置来执行
Linux Makefile编写

Linux Makefile编写

然后我们来执行主程序
Linux Makefile编写

然后执行make clean
Linux Makefile编写

Makefile有一个好处,比如修改了其中某一个文件,重新make的时候,只会重新编译修改的文件,其他文件不会编译
比如我们什么都不改,再执行make
Linux Makefile编写
比如我们现在修改下main.c,再make
Linux Makefile编写
我们看到func1.c和func2.c没有被重新编译,这也是用make的好处

一个简单的Makefile就是这样,下面我们来说下变量,我们可以在Makefile中定义变量,看下面的Makefile文件
Linux Makefile编写
我们定义了一个变量,object,接下来所有用到依赖的地方都用这个变量替换

我们还可以把条件判断加进来
Linux Makefile编写
很简单,不多说了

再说两个变量
$@:代表目标文件
$^:代表所有的依赖
刚才的程序还可以这样改

Linux Makefile编写

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

Linux Makefile编写

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

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

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

Linux Makefile编写

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

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

实验平台上Makefile详细的解释 http://www.linuxidc.com/Linux/2014-01/94827.htm

Makefile之Linux内核模块的Makefile写法分析 http://www.linuxidc.com/Linux/2013-06/85842.htm

Makefile之写demo时的通用Makefile写法 http://www.linuxidc.com/Linux/2013-05/84679.htm

Makefile之大型工程项目子目录Makefile的一种通用写法 http://www.linuxidc.com/Linux/2013-05/84678.htm

Linux多文件编程及Makefile的编写  http://www.linuxidc.com/Linux/2016-08/134249.htm

Makefile隐含规则  http://www.linuxidc.com/Linux/2016-10/136057.htm

Makefile自动生成依赖,自动化编译  http://www.linuxidc.com/Linux/2016-02/128726.htm

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-11/137506.htm

linux
相关资讯       Linux Makefile 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款