$(함수명 인자1, 인자2, 인자3)
형식으로 함수를 호출한다.,
(comma)로 구분한다.$(shell 명령어)
SOURCES = $(shell ls *.c)
echo:
@echo $(SOURCES)
$(subst old, new, 문자열)
subst
stands for substitute string문자열
에서 old
를 발견하면 new
로 교체한다.old
와 일치하는 모든 부분을 교체한다.STR = $(subst are, is, My name are Troy)
echo:
@echo $(STR)
$(patsubst pattern, new, 문자열)
patsubst
stands for pattern substitute string문자열
에서 pattern
을 발견하면 new
로 교체한다.%
기호가 사용될 수 있는데, 이는 공백과 탭을 제외한 모든 문자열을 의미한다.*
와 유사한 역할을 한다.STR = $(patsubst %.c, %.o, main.c add.c sub.c)
echo:
@echo $(STR)
main.o add.o sub.o
가 된다.$(매크로명:pattern=new)
patsubst
대신 $(매크로명:pattern=new)
를 사용할 수 있다.pattern
을 찾아 new
로 교체한다.:
와 pattern
사이에 공백이 있어선 안된다.SOURCES = main.c add.c sub.c
STR = $(SOURCES:%.c=%.o )
echo:
@echo $(STR)
$(sort 문자열)
STR = ddd bbb ccc bbb aaa
SORTED_STR = $(sort $(STR))
echo:
@echo $(STR)
bbb
가 제거된 aaa bbb ccc ddd
다.문자열
앞뒤에 존재하는 공백문자를 없애고, 각 단어 사이의 공백문자를 하나로 만든다.STR = aa bb cc
all :
ifeq ($(strip $(STR)),aa bb cc)
@echo "stripped."
else
@echo "$(STR) is not stripped."
endif
STR
은 <space><space>
aa<space><space>
bb<space><space>
cc<space><space>
으로 정의 되어 있다.<space>
bb<space>
cc가 된다.pattern
과 일치하는 문자열
만 나오게 해준다.FILES = add.c calc.h main.c sub.c asm.S
SOURCES = $(filter %.c %.S, $(FILES))
HEADERS = $(filter %.h, $(FILES))
echo:
@echo $(SOURCES)
@echo $(HEADERS)
add.c main.c sub.c asm.S
calc.h
pattern
과 일치하지 않는 문자열
만 나오게 해준다.FILES = add.c calc.h main.c sub.c asm.S
SOURCES = $(filter-out %.c %.S, $(FILES))
HEADERS = $(filter-out %.h, $(FILES))
echo:
@echo $(SOURCES)
@echo $(HEADERS)
calc.h
add.c main.c sub.c asm.S
문자열
에서 탐색할 문자열
을 찾는다.탐색할 문자열
을 리턴하고, 못찾으면 NUL문자
를 리턴한다.STR = aaa bbb ccc
echo:
@echo $(findstring bbb, $(STR))
STR = aaa bbb ccc
echo:
@echo $(words $(STR))
3
이다.echo:
@echo $(word 2, aaa bbb ccc ddd eee)
bbb
가 출력된다.시작index
와 끝index
를 지정해서 단어 리스트를 뽑을 수 있다.echo:
@echo $(wordlist 2, 4, aaa bbb ccc ddd eee)
bbb ccc ddd
가 출력된다.echo:
@echo $(firstword aaa bbb ccc ddd eee)
aaa
가 출력된다.echo:
@echo $(join main asm, .c .S)
main
+.c
와 asm
+.S
가 되어main.c asm.S
이 출력된다.$(dir 문자열)
PATHS = /home/rev/test.c /bin/ls /usr/bin/vim
echo:
@echo $(dir $(PATHS))
/home/rev/ /bin/ /usr/bin/
가 된다.$(notdir 문자열)
PATHS = /home/rev/test.c /bin/ls /usr/bin/vim
echo:
@echo $(notdir $(PATHS))
test.c ls vim
가 된다.$(suffix 문자열)
PATHS = /home/rev/test.c /home/rev/ss/test.sh /home/rev/test.o
echo:
@echo $(suffix $(PATHS))
.c .sh .o
다.$(basename 문자열)
.확장자
를 제외한 순수한 파일명만 출력한다./home/rev/test.c
의 확장자를 제거한 순수한 파일명은 /home/rev/test
다.$(addsuffix 접미사, 문자열)
$(addsuffix .c, main add sub)
main.c add.c sub.c
를 리턴한다.$(addprefix 접두사, 문자열)
$(addprefix /home/rev/, main.c add.c sub.c)
/home/rev/main.c /home/rev/add.c /home/rev/sub.c
를 리턴한다.$(wildcard pattern)
pattern
과 일치하는 파일 리스트를 뽑는다.pattern
에 bash wild card인 *
가 사용 가능하다.$(wildcard *.c)
를 하면, 현재 디렉터리에 존재하는 .c파일의 리스트를 리턴한다.$(foreach 변수명, 대입 문자열, 확장 문자열)
SOURCES = $(foreach name, main add sub, $(name).c)
echo:
@echo $(SOURCES)
main.c add.c sub.c
TEXTFILES = $(foreach dir, Documents Desktop Downloads, $(wildcard $(dir)/*.txt))
echo:
@echo $(TEXTFILES)
$(origin 매크로명)
origin함수는 인자로 지정한 매크로가 어떻게 정의된 매크로인지 관한 문자열을 리턴한다.
origin함수가 리턴하는 문자열의 의미는 다음과 같다.
리턴한 문자열 | 설명 |
---|---|
undefined | 정의되지 않은 매크로 |
file | Makefile내에서 정의된 매크로 |
environment | 환경 변수 |
command line | make를 실행할 때, 실행인자로 정의한 매크로 |
default | 내부 매크로 |
environment override | 환경 변수 |
automatic | 자동 매크로 |
override | override 매크로 |
🔍ex)
echo:
@echo $(origin CC)
default
가 출력된다.