Call Function
$( call variable , param , param, ... )
call 함수는 사용자 정의 함수를 호출할 때 인수를 전달할 수 있게 해줍니다.
기본적으로 인수들은 ,
문자로 구분해 전달하고
전달된 인수는 shell 함수 에서처럼 숫자 변수에 자동으로 할당됩니다.
$0
: 함수 이름$1
: 첫 번째 인수$2
: 두 번째 인수
. . .
call 함수의 반환값
info 함수는 출력은 발생하지만 결과로 empty 가 반환되므로 call 함수의 반환값도 empty 가 됩니다.
# recursive 연산자를 이용해 foo 함수 정의
foo = $(info name: $0, arg1: $1, arg2: $2 )
$(call foo,111,222)
######### 실행 결과 ##########
name: foo, arg1: 111, arg2: 222
다음은 call 함수의 반환값이 bbb aaa
가 됩니다.
reverse = $2 $1
res := $(call reverse,aaa,bbb)
다음의 경우는 call 함수의 반환값이 shell script 명령이 됩니다. 만약에 foreach 함수를 이용해 call 함수를 반복하게 되면 여러 개의 shell script 명령이 중복 생성되어 실행되게 됩니다.
define print_file_contents
echo ">>> FILE: $1"; \
awk 'BEGIN { \
while (getline < "$(strip $1)" > 0) { \
print $$0 \
} \
}';
endef
foo :
$(call print_file_contents,test.txt)
################ 실행 결과 ##################
sh$ make
echo ">>> FILE: test.txt"; awk 'BEGIN { while (getline < "test.txt" > 0) { print $0 } }';
>>> FILE: test.txt
111
222
333
전달할 인수가 없을 경우
함수에 인수를 전달하지 않는다면 그냥 변수를 사용하는 것과 call 함수를 사용하는 것은 차이가 없습니다.
AA = $(shell date)
$(info $(AA))
결과: Thu 09 May 2019 02:02:47 PM KST
$(info $(call AA))
결과: Thu 09 May 2019 02:02:47 PM KST