在 GNU Make 函数中使用 shell 个参数

Use shell arguments inside GNU Make function

是否可以在 makefile 函数中使用 shell 参数? 例如

mywords:=hello there neighbour

myrecipe:
    for ((i = 0 ; i < 3 ; i++)); do \
        this_word=$(word $${i}, $(mywords)); \
    done

除了myrecipe给出错误non-numeric first argument to 'word' function: '${i}'. Stop

请记住,make 在对 shell 进行任何操作之前首先展​​开整个配方(是的,这就是所有配方行)。 只有在完全展开之后 make 才会查找单独的配方行,运行 每行依次查找。

因此,make 当您有一个扩展到多行的宏时,它的行为是明智的。

它还提示您应该尽可能使用 make 功能。

mywords := hello there neighbour

define mkcommand
    echo 
    something 
endef

myrecipe:
    $(foreach _,${mywords},$(call mkcommand,$_))

现在,当您要求 make 构建 myrecipe 时, make 看到类似的东西:

myrecipe:
    echo hello
    something hello
    echo there
    something there
    ⋮

恕我直言,如果您发现自己在 makefile 中编写 shell 循环,那几乎总是一个错误。