오늘은 맑음

[Linux] gcc를 이용한 컴파일 / Makefile study(3) 본문

Makefile

[Linux] gcc를 이용한 컴파일 / Makefile study(3)

자전거 타는 구구 2021. 4. 17. 14:45
반응형

프로젝트를 작성하다 보면 src file (예를 들면 *.c파일이나 *.cpp 또는 *.h)이 모두 동일한 계층에 들어있을 수도 있습니다.

모듈이 적은 경우에는 괜찮지만 모듈이 정말 많은 경우 하나의 계층에 너무 많은 파일들이 들어있겠죠?

이런 경우 유지보수를 하거나, 파일들이 한 눈에 들어오지 않아 매우 불편합니다.

따라서 이번에는 이전 글에서 포스팅 했던 프로젝트에서 폴더를 나눠보겠습니다.

 

이전 포스팅에서는 src라는 폴더에 main.c, world.c, world.h가 모두 들어있었습니다.

이번에는 world.c와 world.h를 src/print_world에 넣어보겠습니다.

 

그러면 최종 프로젝트의 계층 구조는 아래와 같습니다.

  • Project
    • makefile
    • bin
    • src
      • main.c
      • print_world
        • world.c
        • world.h

이렇게 hello를 출력하는 main.c와 world를 출력하는 .c / .h가 분리되었습니다.

 

이제 makefile도 수정해주겠습니다.

 

CC := gcc

CFLAGS = -Wall -D_FILE_OFFSET_BITS=64 -g
LDFLAGS = -static -lm

CFLAGS += \$(foreach dir, \$(INC_DIRS), -I\$(dir))

EXE = bin/play
OBJ_DIRS = obj
SRC_DIRS = src \
                src/print_world

SRCS = \$(foreach dir, \$(SRC_DIRS), \$(wildcard \$(dir)/*.c))
OBJS = \$(SRCS:.c=.o)


all : clean \$(OBJS)
        \${CC} -o \$(EXE) \$(OBJS) \$(LDFLAGS)

clean :
        rm -f \$(OBJS)
        rm -f \$(EXE)

 

SRC_DIRS에 src/print_world를 추가해주었습니다.

 

SRC_DIRS를 수정한 후 다시 make를 수행해주면 정상적으로 컴파일 되는 것을 확인할 수 있습니다.

그리고 src에 모두 저장되었던 .o파일들도 컴파일 대상의 소스와 동일한 계층에 담겨있는 것도 확인할 수 있습니다.

 

오늘은 이렇게 SRC_DIRS를 수정해서 프로젝트를 계층화 해보았습니다.

 

 

반응형
Comments