一、make 和 makefile 是什么
1. make 是一个 命令。
2. makefile 是一个 文件,可以自动化的构建项目。
3. 编写 makefile 需要:
(1)依赖关系
(2)依赖方法
二、什么是依赖关系、什么是依赖方法
下面我简单写一个makefile,先别管里面的代码什么意思,我先解释什么是依赖关系、以及什么是依赖方法。
如下图:
1. 依赖关系
依赖关系是红色圈起来的部分,如下图:
上图的依赖关系中:冒号(:)的左侧是目标文件,右边是依赖文件列表!记住是 依赖文件列表!
但是现在目前上面的文件列表只有一个!下面的是空!
依赖文件列表可以不依赖任何文件!
2. 依赖方法
依赖方法是蓝色圈起来的部分,如下图:
最上面的 makefile 中,看清楚!makefile 是 tab 键开始!!!
3. 那么 .PHONY 是什么?
这里的 .PHONY 是伪目标,类似 makefile 中的关键字,表明 clean 是一个伪目标。
总是会根据依赖关系,执行依赖方法,习惯:clean 设置 .PHONY
三、使用 makefile
我这里简单编写一个代码,然后用 make 来编译,前面开始将了 make 是命令!!!
如下图:
简答写了一个 test.cpp 文件
而 makefile 中依然是如下内容:
这里我先把目录下的文件查看一下,如下图:
那么 make 是命令怎么用?如下图:
make 之后发现跟自己写的依赖方法是一样的,那么是不是执行了自己写的编译这个test.cpp文件的这条语句?查看一下,如下图:
查看目录下面果然生成了一个 test 文件, 那么既然编译了,执行一下,如图:
这样就可以运行起来了!
那么编译好生成了可执行的 test 文件后,删除文件怎么删除?
那么 clean 就可以用上了,如下图:
make clean 之后,也就执行了自己写的依赖方法。
四、扩展
那么肯定有人觉得编写一个 test.cpp 文件,还要在 makefile 文件里面写代码,一条命令不久好了?删文件也是一条命令不就好了?
是的!确实一条命令就可以了!
但是!!!那么如果你有很多文件呢? 命令行打一长串?一条一条打?那么删除呢?
这里在写一个例子,我这里就两个文件做一下对比,更多个文件的话,方法类似!!!
如下图:
test1.cpp
test2.cpp
makefile
那么 make 之后是什么,如下图:
可以看到,直接生成两个可执行文件,test1、test2, 运行一下,如下图:
make clean 一下,如下图:
all 不需要依赖方法,只维护依赖关系;
当识别到 all 依赖这两个关系的时候,会推导式的执行下面两个命令;
当all 的依赖关系满足了,要执行all 的依赖方法,但是 all 没有! 至此 makefile 执行结束!
以上就是 makefile 工具的简单是使用!!!