
$(함수명 인자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가 출력된다.