2024-03-10 00:39:49
本质是一个带有依赖管理的任务编排工具,生产上是用于软件项目构建的重要工具,比较著名的例子有GNU/Linux的Makefile,将复杂的项目中间文件依赖以Makefile组织了起来,不光大大简化了构建过程,也使它能享受到make提供的,基于依赖关系的并行能力和构建状态管理(比如源文件没有改动就会跳过目标文件的构建)。
并且,Makefile本身支持include,因此也就具有了模块化管理的功能。而且,基于依赖关系的构建描述也使得项目的构建具有了一定的可维护性。
.PHONY伪目标,其后跟随的目标无论是否源文件有改动都会强制重新执行。例如:
.PHONY: all test clean
当执行这三个指令时,无论源文件是否更改/存在,它们都会被确保执行。 ## 参数
-B, --always-make Unconditionally make all targets.
之前会遇到Make一个target时总是会提示已经最新了,但是这个target底下的文件并不是最新的。虽然用.PHONY可以解决,但是始终是个问题。
今天偶然发现,这是因为target和文件夹重名,把target改成一个不存在的文件就好了。Makefile的target一般指向一个文件,指向文件夹的话或许会因为子文件的改动没有更新文件夹,这就导致文件夹看起来没有改动,导致Make提醒你文件没有改动,并不进行Make。