쿼카러버의 기술 블로그
[Makefile] %(percent symbol)의 의미 본문
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값이 입력되는 것.
'Linux - Ubuntu > Shell Script' 카테고리의 다른 글
[Linux] sed 유용한 명령어 모음 (계속 업데이트할 게시글) (0) | 2021.12.05 |
---|---|
[Makefile] Makefile의 substitution 함수 두 가지 subst, patsubst (0) | 2021.08.20 |
[Linux] tr - 리눅스 명령어 tr에 대해서 (0) | 2021.08.18 |
[Linux] sed - 리눅스 명령어 sed에 대해서 (1) | 2021.08.18 |
Linux Shell Script - find (리눅스에서 파일, 디렉토리 찾는 법) (0) | 2021.07.22 |
Comments