我希望make进程仅在第一个执行的目标上有条件地回显 在下面的makefile中,它应该只打印'a','b'或'goal' 目前,由于L未被修改,因此会打印任何已执行的目标。
我已经使用外部临时文件和脚本完成了它,但我想知道在没有外部文件/脚本的情况下它是否完全可以使用?
L=1
goal: a b
ifeq ($(L),1)
@echo goal
@L=0
endif
@echo done > goal
a:
ifeq ($(L),1)
@echo a
@L=0
endif
@echo done > a
b:
ifeq ($(L),1)
@echo b
@L=0
endif
@echo done > b
答案 0 :(得分:0)
你不能使用ifeq等因为这些是预处理器语句:它们是在读入makefile时执行的。
在传统制作中,除了通过脚本和文件之外,没有办法做你想做的事情。如果你愿意特定GNU make,并且需要一个足够新的GNU版本来支持$(eval ...)
函数,那么你就可以做到;类似的东西:
SHOW := true
goal: a b
$(if $(SHOW),@echo goal $(eval SHOW :=))
@echo done > goal
a:
$(if $(SHOW),@echo a $(eval SHOW :=))
@echo done > a
b:
$(if $(SHOW),@echo b $(eval SHOW :=))
@echo done > b