修改makefile中的变量

时间:2013-04-03 12:50:31

标签: variables makefile gnu

我希望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

1 个答案:

答案 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