home..

C++ make 빌드 정리

용어 및 컴파일 개념 정리

컴파일 과정은 전처리 -> 컴파일 -> 링크 3단계로 이루어짐

Make

make는 소프트웨어 개발을 위해 유닉스 계열 운영체제에서 주로 사용되는 빌드 도구

여러 소스 파일들의 의존성을 표준적인 문법으로 정의함으로써 컴파일 과정이 최적화되고 쉬워진다.

ex) 목적파일 생성 -> 실행 파일 생성 2가지 쉘 스크립트가 make로 간단히 처리됨

Makefile

기존 C++의 컴파일은 여러 목적 파일을 생성하고 이의 의존성에 맞게 명령어를 내려야 하는 귀찮음이 있지만 이를 미리 makefile에 정의하여 쉽게 처리하는 것이 make 프로그램의 핵심이다.

구조

target ... : prerequisites ...
(tab) recipe
...
...

Makefile 예시

CXX = g++
CXXFLAGS = -std=c++17 -Wall -O2 
INCLUDE = -I./include
OBJS = Base.o A_Module.o B_Module.o main.o

Base.o : src/Base.cpp include/Base.h
	$(CXX) $(CXXFLAGS) $(INCLUDE) -c src/Base.cpp

A_Module.o : src/A_Module.cpp include/A_Module.h
	$(CXX) $(CXXFLAGS) $(INCLUDE) -c src/A_Module.cpp

B_Module.o : src/B_Module.cpp include/B_Module.h
	$(CXX) $(CXXFLAGS) $(INCLUDE) -c src/B_Module.cpp

main.o : src/main.cpp include/Base.h include/A_Module.h include/B_Module.h
	$(CXX) $(CXXFLAGS) $(INCLUDE) -c src/main.cpp

main : $(OBJS)
	$(CXX) $(CXXFLAGS) $(OBJS) -o main.out

clean:
	rm -f main.out $(OBJS)

고급 문법

PHONY

.PHONY : clean
clean :
	rm -f main.out $(OBJS)

make clean 명령 실행 하기 전에 clean 이라는 파일이 있다면 make clean 이라는 명령이 무시하게 되므로 이를 막기 위해 PHONY라는 문법이 있다.

패턴 매칭과 빌트인 변수

%.o : %.cpp %.h
	$(CXX) $(CXXFLAGSOP) -c $<

prerequisite 부분에만 사용할 수 있는 패턴 매칭 기능

© 2025 HookSSi   •  Powered by Soopr   •  Theme  Moonwalk