【问题标题】:Modifying variables in makefile修改makefile中的变量
【发布时间】:2013-04-03 12:50:30
【问题描述】:

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

【问题讨论】:

    标签: variables makefile gnu


    【解决方案1】:

    您不能使用 ifeq 等,因为这些是 预处理器 语句:它们在读入 makefile 时执行。

    在传统的 make 中,没有办法做你想做的事,除了像你所做的那样通过脚本和文件。如果您愿意成为特定的 GNU make,并且需要足够新的 GNU make 版本来支持 $(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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      相关资源
      最近更新 更多