[TARGET]... : [DEPENDENCY]...
[TAB][COMMAND]
[TAB]...
[MACRO_NAME] = [VALUE]
$([MACRO_NAME])
CC | C Compiler |
CFLAGS | C Compiler Option |
CXX | C++ Compiler |
CPPFLAGS | C++ Comipler Option |
MAKE_COMMAND | make command |
.SUFFIXES = .o .cpp
$* | 확장자를 제외한 목적파일 |
$@ | 현재의 목적파일 |
$< | 조건 파일중 가장 처음 파일 |
$? | 현재의 목적파일보다 최근에 갱신된 파일 |
.SUFFIXES = .o .cpp
.cpp.o :
g++ -c $?
%.cpp : %.o
g++ -c $?
https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html
실제로 동작을 정의하지 않고 단지 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)