target: prerequisites
\trecipe | 기본 규칙 구조 |
all: target1 target2 | 기본 타겟 |
.PHONY: clean test | 가상 타겟 |
.DEFAULT_GOAL := target | 기본 목표 설정 |
include other.mk | 다른 makefile 포함 |
VAR = value | 재귀 변수 |
VAR := value | 단순 변수 |
VAR ?= value | 조건부 (설정 안 된 경우) |
VAR += value | 변수에 추가 |
$(VAR) or ${VAR} | 변수 사용 |
export VAR | 서브 make로 내보내기 |
override VAR = value | 명령줄 재정의 |
$@ | 타겟 이름 |
$< | 첫 번째 전제조건 |
$^ | 모든 전제조건 |
$? | 타겟보다 새로운 전제조건 |
$* | 패턴 규칙의 어간 |
$(@D) / $(@F) | 타겟 디렉토리/파일 |
$(<D) / $(<F) | 첫 전제조건 디렉토리/파일 |
%.o: %.c | 패턴 규칙 |
$(BUILD)/%.o: %.c | 디렉토리 있는 패턴 |
%.o: %.c %.h | 다중 전제조건 |
$(subst from,to,text) | 텍스트 치환 |
$(patsubst %.c,%.o,$(SRCS)) | 패턴 치환 |
$(strip text) | 공백 제거 |
$(findstring find,text) | 문자열 찾기 |
$(filter pattern,text) | 단어 필터 |
$(filter-out pattern,text) | 단어 제외 필터 |
$(sort list) | 정렬 및 중복 제거 |
$(word n,text) | n번째 단어 얻기 |
$(words text) | 단어 수 |
$(wildcard *.c) | 파일 매칭 |
$(dir path/file.c) | 디렉토리 얻기 |
$(notdir path/file.c) | 파일명 얻기 |
$(suffix file.c) | 접미사 얻기 |
$(basename file.c) | 기본 이름 얻기 |
$(addsuffix .o,$(FILES)) | 접미사 추가 |
$(addprefix src/,$(FILES)) | 접두사 추가 |
$(join list1,list2) | 리스트 결합 |
$(realpath path) | 실제 경로 얻기 |
$(abspath path) | 절대 경로 얻기 |
ifeq ($(VAR),value)
...
endif | 같으면 |
ifneq ($(VAR),value)
...
endif | 같지 않으면 |
ifdef VAR
...
endif | 정의되어 있으면 |
ifndef VAR
...
endif | 정의되어 있지 않으면 |
else | else 절 |
$(if condition,then,else) | 인라인 if |
$(or cond1,cond2) | or 조건 |
$(and cond1,cond2) | and 조건 |
$(foreach var,list,text) | foreach 루프 |
$(call func,arg1,arg2) | 함수 호출 |
define FUNC
...
endef | 함수 정의 |
$(eval $(call TEMPLATE,args)) | 표현식 평가 |
$(shell command) | 셸 명령 실행 |
@command | 조용히 (에코 없음) |
-command | 에러 무시 |
+command | -n에서도 실행 |
command1 && command2 | 명령 연결 |
command1; command2 | 순차 명령 |
$(info message) | 정보 메시지 출력 |
$(warning message) | 경고 출력 |
$(error message) | 에러 출력 후 종료 |
make -n | 드라이 런 |
make -j4 | 병렬 작업 |
make -f other.mk | 다른 makefile 사용 |
make VAR=value | 변수 재정의 |
make -C dir | 디렉토리 변경 |
make -k | 에러 시 계속 |
make -B | 전체 강제 재빌드 |
make --debug | 디버그 출력 |
CC := gcc | C 컴파일러 |
CFLAGS := -Wall -g | 컴파일러 플래그 |
SRCS := $(wildcard *.c) | 소스 파일 |
OBJS := $(SRCS:.c=.o) | 오브젝트 파일 |
TARGET := program | 출력 이름 |
$(TARGET): $(OBJS)
\t$(CC) -o $@ $^ | 링크 규칙 |
%.o: %.c
\t$(CC) $(CFLAGS) -c $< -o $@ | 컴파일 규칙 |
clean:
\trm -f $(OBJS) $(TARGET) | clean 타겟 |
install:
\tcp $(TARGET) /usr/local/bin | install 타겟 |
test:
\t./run_tests.sh | test 타겟 |
help:
\t@echo "Available targets" | help 타겟 |