Makefile的目标
Makefile为什么需要伪目标
这里的目标是指makefile文件中的目标,不是Makefile的历史使命
Makefile中的目标到底是什么呢,make命令是怎么样理解目标呢
1.make将makefile的目标认为是一个文件;
2.make解释器比较目标文件和依赖文件的新旧关系,决定是否执行命令
为里理解Makeifle的目标来做以下测试
编写一个Makefile
在同一个目录下新建一个test文件
Makefile文件内容如下:
test:
echo test
此时执行make会出现什么情况,一定会有人会认为会执行echo test语句
实际情况是下面的结果
string@asus:~/Projects/makefile$ make
make: 'test' is up to date.
为什么是上面的情况呢,别忘了在目录下新建了一个test文件,这个文件是出现这个情况的罪魁祸首,因为make将目标认为是一个文件,所以执行make的时候会去寻找该文件,如果该文件存在则不会执行相应的语句
如果删除该test文件则会按照预期的目标执行
如果一个目标不去检测,一定要执行该怎么办,Makefile提供了一个很好的办法,在大多数的Makefile中也有这个办法的例子,那就是Makefile的伪目标的,将一个目标设计伪目标的时候不管如何都会去执行目标下的命令
在该例子中添加如下语句则会按照预期的结果执行
.PHONY : test
是不是很熟悉,这个就是在大多数Makefile中clean的处理方法,这大概就是伪目标的由来原因吧