GNU Makefiles中是否有类似python装饰器的机制?
我发现自己在两种可能性之间有点左右为难,即在makefile中声明GNU使tragets是假的 一个是一次性宣布所有虚假信息:GNU Makefiles中是否有类似python装饰器的机制?,makefile,decorator,gnu-make,Makefile,Decorator,Gnu Make,我发现自己在两种可能性之间有点左右为难,即在makefile中声明GNU使tragets是假的 一个是一次性宣布所有虚假信息: .PHONY: targ1 targ2 targ3 targ1: ... targ2: ... targ3: ... 这样做的好处是(对我来说)更容易阅读,也更整洁。但人们无法很快看出哪些目标是假的 另一种可能是在规则的前面或后面声明虚假: 这(对我来说)更难读。我也不喜欢规则名称的重复。python中是否有类似函数装饰器的解决方案
.PHONY: targ1 targ2 targ3
targ1:
...
targ2:
...
targ3:
...
这样做的好处是(对我来说)更容易阅读,也更整洁。但人们无法很快看出哪些目标是假的
另一种可能是在规则的前面或后面声明虚假:
这(对我来说)更难读。我也不喜欢规则名称的重复。python中是否有类似函数装饰器的解决方案?大概是这样的:
@pny
targ1:
...
@pny
targ2:
...
@pny
targ3:
...
MAKEFILE = $(lastword $(MAKEFILE_LIST))
.PHONY: $(shell grep -E -A1 "^\s*\#\s*phy" $(MAKEFILE) | \
grep -Pio "^[a-z][-_.a-z0-9]+\s*(?=:)")
#phy
targ1:
...
#phy
targ2:
...
#phy
targ3:
...
我怀疑这样的东西可能对应用程序更有用,而不仅仅是伪造规则,因为这只是我个人喜好的问题。因此,我的问题有了一个更宽泛的标题。我不知道有什么内置的。但对于一个(不太便携,不可取)解决方案,您可以这样做:
@pny
targ1:
...
@pny
targ2:
...
@pny
targ3:
...
MAKEFILE = $(lastword $(MAKEFILE_LIST))
.PHONY: $(shell grep -E -A1 "^\s*\#\s*phy" $(MAKEFILE) | \
grep -Pio "^[a-z][-_.a-z0-9]+\s*(?=:)")
#phy
targ1:
...
#phy
targ2:
...
#phy
targ3:
...
此解决方案在Makefile中搜索每个规则上方行中的字符串#phy
。它提取规则名称。使用unix程序grep
和shell调用。然后将规则名称作为.PHONY
的源
要制作一个更通用的“装饰器”,您可以将其与以下答案中的技术结合起来:,即,define
用于构建make规则的文本的部分,具体取决于输入参数。然后在foreach
循环中调用该定义,以实际创建规则
但是,
grep
尤其是使用-p
选项时,可能不会出现在每个系统上。此外,包含子makefile可能会产生问题。而且,大多数人遇到这种卑鄙的黑客行为时,都会想伤害你。ooh,我真的想对你的狡猾行为表示赞赏,同时对你虐待同事的行为表示不满。如果我继承了一个包含这样一个Makefile的项目,我会。。。嗯,我会说一些坏话。我也可能知道你住在哪里。哦,还有谷歌搜索附近的斧头店。为了你的理智和心灵的平静,我的答案中添加了一条免责声明。现在,斧头店老板会失望的。我想不能让每个人都满意。