Make

작동방식

  1. make를 입력한다.
  2. make가 Makefile를 읽어 규칙을 분석한다.
  3. 첫번째 규칙의 조건파일중 수정된것이 있는지 확인한다.
    • 이때 파일의 수정 시간을 참조한다.
    • 만약 조건파일이 목표파일로 지정된 규칙이 있으면 그 규칙또한 확인한다.
  4. 지정된 명령을 실행한다.

Makefile

기본규칙

[TARGET]... : [DEPENDENCY]...
[TAB][COMMAND]
[TAB]...

매크로

미리 정의된 매크로

CCC Compiler
CFLAGSC Compiler Option
CXXC++ Compiler
CPPFLAGSC++ Comipler Option
MAKE_COMMANDmake command

SUFFIXES Rule

.SUFFIXES = .o .cpp
$*확장자를 제외한 목적파일
$@현재의 목적파일
$<조건 파일중 가장 처음 파일
$?현재의 목적파일보다 최근에 갱신된 파일
.SUFFIXES = .o .cpp
.cpp.o :  
	g++ -c $?

패턴 규칙

%.cpp : %.o
	g++ -c $?

Automatic Variables

https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html

Dependency

실제로 동작을 정의하지 않고 단지 dependency만 표시하고 싶은경우(위의 SUFFIXES Rule나 패턴 규칙으로 인해 동작이 이미 정의 되는 경우) 동작부분을 작성하지않고 : 으로 dependency만 나타낼수 있다.

최종예제

SOURCES = $(wildcard *.cpp)
OBJECTS = $(SOURCES:.cpp=.o)
TARGET = main

.PHONY : all clean

all : $(OBJECTS)
	$(CXX) -o $(TARGET) $(OBJECTS)
%.d : %.cpp
	$(CXX) -MM $< > $@
%.o : %.cpp
	$(CXX) -c $(CPPFLAGS) $<
clean :
	rm -rf $(OBJECTS) $(TARGET) $(OBJECTS:.o=.d)

-include $(SOURCES:.cpp=.d)
    

활용예

프로젝트용 c++ make file 참조.

참고 문헌