我的目标是在执行所有其他目标之前运行一次配方,并且最好不要创建虚拟文件或向每个目标添加依赖项。
我最初的想法是定义一个如下目标:
once:
stuff to do once
%: once
actual_target: actual dependencies
actual_recipe
但是我相信这将导致该once
目标针对每个目标运行一次,而不是针对每个目标运行一次。因此,我的第二个想法是执行以下操作:
once_default:
stuff to do once
make actual_default
actual_default: actual dependencies
actual_recipe
尽管这达到了“每次制造一次”的要求,但它仅适用于默认目标。编写bash脚本进行包装似乎很愚蠢make
,因为make
应该具有这种功能。(感人一个“一次”文件不应需要,给予的存在.PHONY
)。我只需要这个一次性项目,因此GNU扩展很好。
只需将其放在makefile中的某个位置即可:
once:
stuff to do once
Makefile: once
(我假设您的makefile的名称为“ Makefile”。如果不是,请进行相应调整。)
如果有重建生成文件的规则,则Make将首先运行该文件,然后重新启动并运行您要求的目标。在这种情况下,您实际上并没有重建makefile,但是Make并不知道。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句