现在的位置: 首页 > 操作系统 > 正文

LinuxMakefile编写详述

2020年02月13日 操作系统 ⁄ 共 1816字 ⁄ 字号 评论关闭

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

func2.c

main.c

来看一个简单的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,跟进里面的配置来执行

然后我们来执行主程序

然后执行make clean

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

以上就上有关LinuxMakefile编写详述的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。

抱歉!评论已关闭.