본문 바로가기

Linux/Makefile

foreach

foreach 함수의 문법은 다음과 같다:

$(foreach var,list,text)

첫번째 두 매개변수들, var와 list는 다른 것이 수행되기 전에 확장된다; 마지막 매개변수 text는 동일한 시간에 확장되지 않는다. 그리고 나서 list의 확장된 각 단어에 대해서 var의 확장된 값을 가지는 변수는 이 단어로 설정되고 그 다음에 text가 확장된다. 아마 text는 그 변수에 대한 참조를 담고 있을 것이다. 그래서 그것의 확장은 매번 다르다.

결과적으로 text는 list에 있는 공백으로-분리된 단어들 개수만큼 확장된다. text의 여러 확장들이 그들 사이에 스페이스들을 넣어서 연결되어 foreach의 결과를 만든다.


다음 단순한 예제는 변수 `files'를 `dirs' 리스트의 디렉토리들에 있는 모든 파일들의 리스트로 설정한다.

[code]
dirs := a b c d
files := $(foreach dir,$(dirs),$(wildcard $(dir)/*))
[/code]

여기서 text는 `$(wildcard $(dir)/*)'이다. 첫번째 반복은 dir에 대해서 값 `a'을 찾아 넣고서 `$(wildcard a/*)'와 동일한 결과를 생산한다; 두번째 반복은 `$(wildcard b/*)'이라는 결과를 생성한다; 그리고 세번째는 `$(wildcard c/*)'.

이 예제는 다음 예제와 동일한 (`dirs'를 설정하는 것 빼고) 결과를 가진다:

[code]
files := $(wildcard a/* b/* c/* d/*)

find_files = $(wildcard $(dir)/*)
dirs := a b c d
files := $(foreach dir,$(dirs),$(find_files))


[/code]



'Linux > Makefile' 카테고리의 다른 글

words  (0) 2013.09.26
dir  (0) 2013.09.26
realpath  (0) 2013.09.26
-c  (0) 2013.09.26
-isystem  (0) 2013.09.26