쿼카러버의 기술 블로그

[Makefile] %(percent symbol)의 의미 본문

Linux - Ubuntu/Shell Script

[Makefile] %(percent symbol)의 의미

quokkalover 2021. 8. 20. 18:15

make에서 %의 의미가 뭘까?

1) %의 의미 간단한 설명
2) 내가 가장 많이 사용하는 경우

1) %의 의미 간단한 설명

makedpsms 패턴 룰 (pattern rule)이라는 개념이 있다.
%를 제외하고 다른 패턴들은, 정확하게 일치해야 하지만,
%는 any nonempty sunstring과 매칭될 수 있다. (최소 1자 이상은 있어야함.)

예를 들어 설명하자면
%.c에서 %는 모든 .c로 끝나는 문자열과 매칭된다.
마찬가지로 s.%.c를 쓰게되면, s.로 시작하고 .c로 끝나는 문자열과 매칭된다. 즉 최소 5자는 되는 문자열과 매칭되는 것.

이때, %와 매칭되는 substring을 stem이라고 부른다.

여기서 주의사항이 있다.
target에만 %가 있고, prerequisite에는 %가 없는 것은 허용된다.
하지만 prerequisite부분에 %이 있다면, target에도 동일하게 %에 매칭되는 stem이 있어야 한다.

예를 들어 설명해보겠다.

%.o: %.c
        $(CC) $(CFLAGS) -c -o $@ $<

예로 pattern rule ‘%.o : %.c’ 는 모든 stem.o 파일을 만들기 위해서는 stem.c가 필요하다는 것.
즉, .o로 끝나는 파일은 똑같은 prefix를 가지는 .c파일이 실제로 있어야한다는 것을 의미한다.

2) 내가 가장 많이 사용하는 경우

내가 가장 많이 사용하는 경우는 크게 두 가지가 있다.

1) pathsubst
2) target에서 패턴 매칭

1) patsubst

$(patsubst %.c,%.o,x.c.c bar.c)

실행결과 x.c.o bar.o

2) target에서 패턴 매칭 (@ 활용)

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

위를 실행하게 되면, test.haha, haha가 출력된다. 보면 알겠지만 $(@)에 %에 매칭되는 substr값이 입력되는 것.

Comments