target : 어떤 것을 make 할 지 전달할 대상
prerequisities (필요 조건들) : 주어진 타겟을 make할 때 사용될 파일들의 목록 (= 의존 파일)
recipes (실행할 명령어) : 타겟을 make 할 때 실행할 명령어의 나열
변수
CC = g++
# C++ 컴파일러 옵션
CXXFLAGS = -Wall -O2
# 링커 옵션
LDFLAGS =
# 헤더파일 경로
INCLUDE = -Iinclude/
# 소스 파일 디렉토리
SRC_DIR = ./src
# 오브젝트 파일 디렉토리
OBJ_DIR = ./obj
# 생성하고자 하는 실행 파일 이름
TARGET = main
# Make 할 소스 파일들
# wildcard 로 SRC_DIR 에서 *.cc 로 된 파일들 목록을 뽑아낸 뒤에
# notdir 로 파일 이름만 뽑아낸다.
# (e.g SRCS 는 foo.cc bar.cc main.cc 가 된다.)
SRCS = $(notdir $(wildcard $(SRC_DIR)/*.cc))
OBJS = $(SRCS:.cc=.o)
DEPS = $(SRCS:.cc=.d)
# OBJS 안의 object 파일들 이름 앞에 $(OBJ_DIR)/ 을 붙인다.
OBJECTS = $(patsubst %.o,$(OBJ_DIR)/%.o,$(OBJS))
DEPS = $(OBJECTS:.o=.d)
all: main
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cc
$(CC) $(CXXFLAGS) $(INCLUDE) -c $< -o $@ -MD $(LDFLAGS)
$(TARGET) : $(OBJECTS)
$(CC) $(CXXFLAGS) $(OBJECTS) -o $(TARGET) $(LDFLAGS)
.PHONY: clean all
clean:
rm -f $(OBJECTS) $(DEPS) $(TARGET)
-include $(DEPS)
SRCS = $(wildcard .c) : 현재 디렉토리에서 .c와 파일명이 일치하는 파일을 찾아 공백을 구분 문자로 SRCS 매크로에 정의
OBJECTS = $(SRCS:.c=.o) : 대입 참조 기법을 통해 확장자 .c가 .o로 바뀜
$(addsuffix 접미사, 문자열) : $(addsufix .c, memo main) => memo.c main.c
$(addprefix 접두어, 문자열) : $(addprefix src/, memo main) => src/memo src/main
$(shell ) : SH = $(shell ls *.c) => shell 명령에 대한 결과가 변수에 들어감
$(subst 찾을 문자, 변경할 문자, 대상 문자) : "대상문자"에서 "찾을 문자"를 "변경할 문자"로 변경해 준다.
$(patsubst 찾을 패턴, 변경할 패턴, 대상 문자) : subst와 기능은 동일하나 확장자를 바꿀때 사용함
$(strip 대상문자) : 대상문자에서 모든 공백을 1칸으로 줄인다. 여백이 많아도 모두 1칸으로
$(filter 찾을 문자, 대상문자) : 대상문자에서 찾을 문자를 포함한 문자들을 찾아서 저장한다.
$(filter-out 찾을 문자, 대상문자) : filter와 반대로 찾을 문자가 있는 경우를 제외하고 저장한다.
$(join 원본문자, 붙일문자) : 원본문자와 붙일문자를 붙여서 한 문자로 만든다.
$(dir 대상문자) : 대상문자에서 파일문자를 제외한 경로명만 추출한다.
$(notdir 대상문자) : 대상문자에서 파일명만 추출한다.
$(baseanme 대상문자) : 대상 문자에서 확장자를 제외한 문자를 알려준다.
42 프로젝트를 위한 testing framework
bash -c "$(curl -fsSL https://raw.github.com/xicodomingues/francinette/master/bin/install.sh)"
gcc -h *.c *.h
lldb a.out
r
or run
b 함수명/줄번호
n
or next
s
or step
p 변수명
or print 변수명
exit