如何在linux makefile中初始化并迭代数组?
我需要创建一个带有目录的数组,然后将其插入,在每一步中创建一个数组,该数组将包含通过“find”命令为每个derictory找到的所有文件,并对该数组进行迭代。我试着这样做:如何在linux makefile中初始化并迭代数组?,linux,unix,makefile,gnu-make,Linux,Unix,Makefile,Gnu Make,我需要创建一个带有目录的数组,然后将其插入,在每一步中创建一个数组,该数组将包含通过“find”命令为每个derictory找到的所有文件,并对该数组进行迭代。我试着这样做: declare -a arr=(a b c) ;\ for key in "$${arr[@]}" ; do \ ... done\ 但它不起作用。 即使这样也会出现错误: all: declare -a array=(a b c) ;\ echo "$${array[1]}"
declare -a arr=(a b c) ;\
for key in "$${arr[@]}" ; do \
...
done\
但它不起作用。
即使这样也会出现错误:
all:
declare -a array=(a b c) ;\
echo "$${array[1]}" \
/bin/sh: 1: Syntax error: "(" unexpected
Makefile:4: recipe for target 'gg' failed
make: *** [gg] Error 2
获取错误:
all:
declare -a array=(a b c) ;\
echo "$${array[1]}" \
/bin/sh: 1: Syntax error: "(" unexpected
Makefile:4: recipe for target 'gg' failed
make: *** [gg] Error 2
这是因为make在运行recipes时总是调用
/bin/sh
(POSIX shell),除非您另有说明。您使用的语法特定于/bin/bash
shell,在/bin/sh
中不可用
如果您想使用/bin/bash
运行您的食谱,您必须通过将以下内容添加到您的make文件中来明确告知make:
SHELL := /bin/bash
请参阅以获得另一个答案。或将您的行放入
bash
脚本中,并从Makefile
调用该脚本。