본문 바로가기

코딩

Makefile 만들기

 

Makefile 만들기

아래 같이 하면 빌드 완성이다. 아래 Makefile들은 so/a 파일들을 만들 수 있는 스크립트이다.

중요한 것은 INCLUDE폴더에는 *.h 파일들을 SRC_DIR 폴더에는 *.cpp 파일을 존재해야 한다.

 
CC = gcc


# C++ 컴파일러 옵션
CXXFLAGS = -Wall -O2 -fPIC -fexceptions -fpermissive -Wno-narrowing -pthread


# 링커 옵션
LDFLAGS = -lstdc++


# 헤더파일 경로
INCLUDE = -I./include


LIB_PATH = ./library


# 소스 파일 디렉토리
SRC_DIR = ./source


# 오브젝트 파일 디렉토리
OBJ_DIR = ./obj


# 생성하고자 하는 실행 파일 이름
TARGET = libfoundation.so
TARGET_A = libfoundation.a


SRCS = $(notdir $(wildcard $(SRC_DIR)/*.cpp))


OBJS = $(SRCS:.cpp=.o)
DEPS = $(SRCS:.cpp=.d)


# OBJS 안의 object 파일들 이름 앞에 $(OBJ_DIR)/ 을 붙인다.
DEPS = $(OBJECTS:.o=.d)


$(shell mkdir -p $(OBJ_DIR))


all: main


$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp
$(CC) $(CXXFLAGS) $(INCLUDE) -c $< -o $@


main : $(OBJECTS)
$(CC) $(CXXFLAGS) $(OBJECTS) -o $(TARGET) -shared $(LDFLAGS)
ar rc $(TARGET_A) $(OBJECTS)
@cp $(TARGET_A) $(LIB_PATH)/$(TARGET_A)


.PHONY: clean all
clean:
rm -f $(OBJECTS) $(DEPS) $(TARGET)


-include $(DEPS)

 

#Makefile #gcc #빌드 #리눅스