【问题标题】:Is it possible to dynamically generate makefile rules?是否可以动态生成makefile规则?
【发布时间】:2022-11-03 23:37:11
【问题描述】:

有一个类似标题的现有问题。但是,这并不是我要问的。

我发现以下是一个典型的用例:

items=Excelsior Shibboleth AbraCadabra

ceremony@%:
  foo bar biz baz $*

ritual@%:
  ding ring bing bong $*

ceremonies: $(foreach item,$(items),ceremony@$(item))
rituals: $(foreach item,$(items),ritual@$(item))

all: ceremonies | rituals

但是,ceremoniesrituals 中的许多都非常耗时并且可能是不可取的。此外,make 最有可能在命令自动完成且文件不大的情况下被采用和使用。

我想要做的是动态定义预定义项目的所有仪式和仪式命令:

# pseudo code -- doesn't work in GNU Make 3.8 (my lowest version compatibility req)
$(foreach item,$(items),$(item)@ritual: ritual@$(item))

因此,当您触发选项卡完成时,会出现逐项命令。并且它将防止makefile变得过于庞大。

这可能吗?


而双重或“Y”的问题是:如果我有一个通配符规则,是否可以生成一些相关的匹配规则结果以在 zsh/bash 中的选项卡完成期间显示?

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    您可以使用eval 函数使代码工作。改变这个:

    $(foreach item,$(items),$(item)@ritual: ritual@$(item))
    

    对此:

    $(foreach item,$(items),$(eval $(item)@ritual: ritual@$(item)))
    

    没有它,这个foreach 扩展的结果将是:

    Excelsior@ritual: ritual@Excelsior Shibboleth@ritual ritual@Shibboleth AbraCadabra@ritual: ritual@AbraCadabra
    

    这显然不是合法的声明。

    请注意,没有像 GNU make "3.8" 这样的版本。我不知道你可能有什么版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 2015-05-18
      • 2013-11-27
      • 2014-01-19
      • 1970-01-01
      相关资源
      最近更新 更多