如何在 Linux makefile 中初始化然后迭代数组?

Via*_* On 3 unix linux makefile gnu-make

我需要创建一个包含目录的数组,然后对其进行 inerate,在每个步骤中再创建一个数组,其中将包括通过每个 derictory 的“find”命令找到的所有文件,并迭代该数组。我试图做这样的事情:

declare -a arr=(a b c) ;\
for key in "$${arr[@]}" ; do \
    ...
  done\
Run Code Online (Sandbox Code Playgroud)

但它不起作用。即使这样也会出错:

all:
        declare -a array=(a b c) ;\
        echo "$${array[1]}" \
Run Code Online (Sandbox Code Playgroud)

得到错误:

/bin/sh: 1: Syntax error: "(" unexpected
Makefile:4: recipe for target 'gg' failed
make: *** [gg] Error 2
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 5

/bin/sh这是因为 make在运行配方时总是调用(POSIX shell),除非您以不同的方式告诉它。您使用的语法特定于/bin/bashshell,在/bin/sh.

如果您想使用以下命令运行您的食谱,/bin/bash您必须通过将以下内容添加到您的 makefile 中来明确告诉 make 这样做:

SHELL := /bin/bash
Run Code Online (Sandbox Code Playgroud)

请参阅For 循环 in makefile 不起作用以获得另一个答案。