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