Makefile基础了解
首先我们得了解makefile是用来干什么的?
makefile是用来管理工程的,比如一个软件项目,它有很多个.C文件,然后我们要编译这些C文件,最终生成一个可执行的文件,这就叫我们软件的工程管理。这个软件的工程管理就要用到makefile,为什么要用到makefile,因为很复杂很麻烦,有时候C文件多了以后,一个一个的来编译就很麻烦。makefile就可以统一编译。
在一个正式的软件项目中,由很多个.C和.H文件构成,此时如果直接在命令行编译,就会像这样:gcc a.c b.c c.c -o exe,每次编译都要输入一堆东西很麻烦,这个问题严重影响工作效率,怎么办?makefile来解决
一个简单的Makefile示例
首先创建一个Makefile文件:touch makefile
然后在这个Makefile里面去写:vi Makefile
创建a.c文件写一段简单的代码 vi a.c 然后 :wq 保存
后面编译直接make就好了,会直接生成exe执行文件
然后执行./exe,就能得到你想要的效果了。
hello world!
然后我要在添加一个b.c进去呢,我们vi b.c 里面定义一个变量让a.c调用
在a.c里面调用b.c的变量i
这个时候如果你没有Makefile,就要gcc a.c b.c -o exe,如果多了的话就比较长
用makefile来管理的话,就会方便很多。
vi makefile ,直接在这里加就完事了
然后make编译,然后执行跟你gcc a.c b.c -o exe 是一样
这样的话,我不管你有多少个.c文件,我只要写好一个makefile,全部都搞定。
标准一点的写法(gcc前面是一个tab’键),后面还有比较高端的写法
Makefile中的基本概念
:前面的exe叫作目标
:后面的a.c b.c 叫作依赖
下的东西叫作命令
目标:目标顶格写,后面是冒号(冒号后面是依赖)是我们想要得到的目标
依赖:依赖是用来产生目标的原材料
命令:命令前面一定是Tab,不能是顶格,也不能是多个空格。命令就是要生成那个目标需要做的动作。
(Windows里面移动到Linux中有可能会把Tab变成空格,此时编译会报错)
我make 那个目标就会得到相应的结果:
make exe 就会得到exe
make clean 就会删除exe
从这个现象就可以看出makefile的工作原理,说白了就是它就是想要把你要做的好多事情,先写好,然后在你make目标的时候他会自动执行这个目标
下面对应的那些命令。
总结:
一.当我们执行make xx 的时候,makefile会自动执行xx这个目标下面的命令语句。
二.当我们make xx的时候,是否执行命令是取决于依赖的。依赖如果成立就会立即执行命令,否则不执行。
三.我们直接执行make和make第一个目标 效果是一样的(默认目标)。
同一个目标下的命令都是一起的,要么都执行,要么都不执行。
先学会基本的概念和应用,先理解makefile的概念和使用方法,工作原理,先学会写用简单的makefile来管理工程。
推荐书籍《跟我一起学makefile》(作者:陈皓)