Foreach Function

$( foreach var , list , text )

foreach 함수는 list 의 각 원소 값이 var 변수에 대입되어 원소 개수만큼 text 가 실행됩니다.
따라서 다음 foreach 함수는 아래와 같이 세 번의 wildcard 함수가 실행되는 것과 같습니다.

text 에서는 var 변수를 사용할 수 있습니다.

dirs := foo bar zoo
files := $(foreach dir,$(dirs),$(wildcard $(dir)/*))
--------------------------------------------------------

$(wildcard foo/*)
$(wildcard bar/*)
$(wildcard zoo/*)

text 인수가 길어질 경우 다음과 같이 recursive 변수를 이용하여 분리할 수 있습니다.
이때 find_files 함수 에서는 foreach 함수에서 설정한 dir 변수를 사용할 수 있습니다.

find_files = $(wildcard $(dir)/*)    # 여기서도 $(dir) 변수를 사용할 수 있다.
dirs := foo bar zoo
files := $(foreach dir,$(dirs),$(find_files))

foreach 함수가 recipe 에서 shell 명령을 실행하는데 사용될 경우는 text 인수 마지막에 shell 명령의 종료를 나타내는 ; 문자를 붙여야 합니다. 그렇지 않으면 출력 전체가 하나의 명령이 돼버립니다.

dirs = file1 file2 file3
program :
    $(foreach dir,$(dirs),echo $(dir))     # text 인수 마지막에 ';' 문자를 붙이지 않으면

##########  실행 결과  ##########

echo file1 echo file2 echo file3           # 출력 전체가 하나의 명령이 돼버린다.
file1 echo file2 echo file3

---------------------------------------

dirs = file1 file2 file3
program :
    $(foreach dir,$(dirs),echo $(dir);)    # 마지막에 ';' 문자를 붙일 경우

##########  실행 결과  ##########

echo file1; echo file2; echo file3;
file1
file2
file3