쿼카러버의 기술 블로그

[Makefile] Makefile의 substitution 함수 두 가지 subst, patsubst 본문

Linux - Ubuntu/Shell Script

[Makefile] Makefile의 substitution 함수 두 가지 subst, patsubst

quokkalover 2021. 8. 20. 18:37

개발을 하다보면 makefile을 사용할 때가 정말 많다.

매번 헷갈려서 정리해보고자 한다.

1. subst

2. patsubst

1) subst

subst = substitution의 약자다.
subst {from},{to},{text} 형식을 가진다.

{text}에서 모든 {from}{to}로 바뀐다

$(subst ee,EE,feet on the street)

위를 수행하면
"fEEt on the strEEt"이 출력된다.

2) patsubst

patsubst는 pattern substitution의 약자다
쉽게 말해서 특정 문자열을 대체하는게 아니라 패턴을 대체한다.
이때 %를 사용하는데, 와일드카드에서 사용되는 *와 비슷한 기능을 한다고 보면된다.

patsubst {pattern},{replacement},{text}

{text}에서 {pattern}에 매칭되는 whitespace(띄어쓰기)로 구분된 word를 찾고, {replacement}와 바꿔준다.

이건 말이 복잡해서 예를 들어서 설명해야 하는데,

$(patsubst %.c,%.o,x.c.c bar.c)
를 실행하면
x.c.o bar.o 가 된다.

즉, %.c라는 패턴을 %.o라는 값으로 바꾸는 것이다.
%가 pattern과 replacement 둘 다에 있을 경우, replacement의 %와 매칭되는 패턴이 pattern에 있는 %와 매칭되는 패턴을 replace하는 것이다.

예를 들어보겠다.

test.%:
    @echo $(@)
    @echo ${patsubst %, aaaa.%, $(@)}

위처럼 수행할경우 %는 모든 문자열과 매칭되는 패턴을 가지고, 앞에 aaaa.를 붙일 수 있게 된다.

주의할 점 :

  • pattern중에 %가 (wildcard로 사용되는)있을 수 있는데, 이때 %는 모든 number와 character와 매칭된다.
  • replacement에 %가 있다면 %는 pattern에서의 %와 매칭되는 텍스트로
Comments