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