make 텍스트 변환 함수

출처 : http://blog.daum.net/english_100/12

8. 텍스트 변환을 위한 함수

 

8.1 함수 호출 문법

 

함수 호출은 변수 참조와 비슷하다. 즉 :

$(function arguments)

또는

${function arguments}

 

여기서 function은 함수 이름으로 make가 제공하는 함수거나 사용자가 직접 만든 함수일 수 있다.

arguments는 함수의 인자로서 함수명과는 공백문자나 탭문자 등으로 분리되고 여러개의 인자가 있을 경우는 콤마로 분리한다. 함수의 인자가 또다른 함수나 변수 참조를 포함하고 있을 때 외부와 내부의 구분문자를 같게해주는 것이 명확하다. 즉 '$(subst a,b,${x}) 보다는 '$(subst a,b,$(x))'이 좋다.

공백문자를 콤마로 대체하는 예문을 보자 :

comma := ,

empty :=

space := $(empty) $(empty)

foo := a b c

bar := $(subst $(space),$(comma),$(foo))

# bar is now 'a,b,c'

 

8.2 문자열 치환 및 분석에 관한 함수

 

$(subst from,to,text)

text 안에 들어있는 fromto로 변환한다.

 

$(patsubst pattern,replacement,text)

text 안에 들어있는 공백문자로 분리된 단어들중에서 pattern에 맞는 것들을 찾아 replacement로 대치한다.

 

$(strip string)

string의 앞이나 뒤에 붙어있는 공백문자를 제거하고 내부에 여러개의 공백문자가 연이어 있는 것은 한개의 공백문자로 줄인다.

 

$(findstring find,in)

in 을 조사하여 find가 있는지를 확인한 후 있으면 find를 없으면 빈문자를 반환한다.

 

$(filter pattern...,text)

text를 조사하여 pattern과 맞는 단어들을 공백문자로 분리하여 반환하고 아닌 단어들은 제거한다.

 

$(filter-out pattern...,text)

text를 조사하여 pattern과 맞지않는 단어들을 공백문자로 분리하여 반환하고 맞는 단어들은 제거한다.

 

$(sort list)

list의 모든 단어들을 사전적 순서에 따라 재배치하고 각각은 공백문자로 분리한다. 중복되는 단어는 제거한다.

 

$(word n,text)

text 내의 n 번째 단어를 반환한다. n이 단어 갯수보다 큰수면 빈문자를 반환함. n은 1 부터 시작하는 수

 

$(wordlist s,e,text)

text 내의 s 번째 단어부터 e 번째까지 단어를 반환한다. s는 1 부터시작하는 수이고 e는 0 부터 시작하는 수이다. stext 내 단어갯수보다 크면 빈문자를 반환하고 e 가 단어갯수보다 크면 맨 끝단어까지 반환한다. se보다 크면 반환되지 않는다.

 

$(words text)

text 내의 단어 수를 반환한다.

 

$(firstword names...)

공백문자로 구분된 이름 리스트인 names 중에서 첫째 값을 반환한다.

 

$(lastword names...)

공백문자로 구분된 이름 리스트인 names 중에서 마지막 값을 반환한다.

 

8.3 파일명과 관계된 함수

 

$(dir names...)

names 속에 들어있는 파일명들 중 디렉토리 부분만 뽑아서 반환. 파일명 중에 '/'가 하나도 포함되어있지 않으면 './'를 반환

 

$(notdir names...)

names 속에 들어있는 파일명들 중 디렉토리 부분을 제외한 순수 파일명만 뽑아서 반환.

 

$(suffix names...)

names 속에 들어있는 파일명들 중 접미사 부분만 뽑아서 반환.

 

$(basename names...)

names 속에 들어있는 파일명들 중 접미사 부분을 제외한 나머지 부분만 뽑아서 반환.

 

$(addsuffix suffix,names...)

공백문자로 분리된 names 내의 이름들 끝부분에 suffix를 첨부한다.

 

$(addprefix prefix,names...)
공백문자로 분리된 names 내의 이름들 앞에에 prefix를 첨부한다.

 

$(join list1,list2)

list1의 n번째와 list2의 n번째를 연결해 새이름을 만든후 그 결과를 반환한다.

 

$(wildcard pattern)

pattern과 일치하는 파일명들을 모두 반환한다.

 

$(realpath names...)
names 속에 들어있는 모든 파일명에 대해 canonical 절대파일명을 반환한다.

 

$(abspath names...)
names 속에 들어있는 모든 파일명에 대해 절대파일명을 반환한다.

 

8.3 조건문과 관련된 함수

 

 

$(if condition,then-part[,else-part])
condition 부분이 참이면 then-part 처리되고 else-part가 명기되어 있고 condition이 거짓이면 else-part를 처리한다.
 
$(or condition1[,condition2[,condition3...]])

$(and condition1[,condition2[,condition3...]])


8.5 foreach 함수


foreach 함수는 다른 함수들과는 달리 하나의 텍스트를 반복해서 사용할 수 있게 한다. 용법은 :

$(foreach var, list,text)

처음 두개 인자 var list는 다른 일들 보다 먼저 펼쳐진다. list의 펼침 값중하나가 var에 할당된 다음 text가 펼쳐진다. 이때 textvar에 따라 펼쳐지므로 매번 달리 펼쳐지게 된다. 공백문자로 구분된 list의 단어 갯수만큼 text를 반복하며 각 결과는 공백문자로 구분되어 서로 이어진다.

dirs := a b c d

files := $(foreach dir,$(dirs),$(wildcard $(dir)/*))


처음에 dir에 a 가 들어간 후 '$(wildcard a/*)'가 수행되고 이어서 ' '$(wildcard b/*)'  '$(wildcard c/*)'가 수행된다. 이는 :

files := $(wildcard a/* b/* c/*)


와 동일하며 다음과 같이 이름을 부여하면 읽기가 더편해질 수 있다 :

find_files = $(wildcard $(dir)/*)

dirs := a b c d

files := $(foreach dir,$(dirs),$(find_files))


여 기서 find_files 변수는 '='를 사용해 순환펼침변수로 정의하였다. 그래야 함수 호출이 일어날 때마다 재 펼침이 이루어진다. 만약 단순펼침변수로 정의할 경우 wildcard는 find_files가 정의될 때 단 한번만 호출될 것이다.

 

8.6 call 함수


call 함수는 인자를 전달할 수 있는 함수를 생성하고 사용하는데 이용되며 임의 변수에 복잡한 업무를 정의한 후 call 함수를 이용해 사용하게 된다. 그 용법은 :

$(call variable,param,param,...)


make가 이 함수를 펼칠 때 각 param들을 $(1), $(2) 등 임시 변수에 저장한 후 사용하는데 $(0)에는 variable이 저장된다. param 의 갯수에는 제한이 없으나 단지 param
이 없이 call 함수를 사용하는 것은 의미가 없다. variable은 변수의 참조가 아니라 바로 이름이다. 그러므로 $()를 사용하는 것은 일반적이지 않다. 
call 함수는 param 을 임시변수에 할당하기 전에 펼침을 수행한다. 이는 빌트인 함수를 참조하는 variable 값의 경우 특별한 펼침방식을 갖음을 의미한다. 예를 들어 :

reverse = $(2) $(1)

foo = $(call reverse,a,b)


결과로 foo는 'b a'를 갖는다. 또다른 예는 :

pathsearch = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH)))))

LS := $(call pathsearch,ls)


LS의 경과는 /bin/ls 유사한 결과를 얻을것이다.

 

8.7 value 함수


value 함수는 변수를 펼치지 않고 그 값을 사용할 수 있게 해준다. 용법은 :

$(value variable)


variable은 변수 참조가 아니라 변수이름이므로 일반적으로 '$'를 쓰지않는다.

FOO = $PATH

all :

@echo $(FOO)

@echo $(value FOO)


결과의 첫행에는 ATH 가 출력되다. 왜냐하면 '$P'이 make 변수로 펼쳐지려 할 것이기 때문이다. 하지만 두번째 줄에는 $PATH 환경변수의 값이 고스란히 프린트 된다.

 

8.8 eval 함수

 

8.9 origin 함수

 

8.10 flavor 함수

 

8.11 shell 함수

 

 

8.12 make를 제어하는 함수들

$(error text...)

text에 명기된 내용의 치명적 에러 메시지를 발생시킨다.

 

$(warning text...)

error 함수와 비슷하지만 make가 exit하지는 않는다. 메시지를 출력하고 makefile에 대한 처리는 계속된다.

 

$(info text...)

text를 출력하는것 외에 아무일도 안함.



위로 스크롤