일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 데이터 해저드
- linux c++ 컴파일
- 딥러닝 가속기
- CDC
- pyverilog 설치 오류
- 남산업힐
- Design DNN Accelerator
- DNN 가속기
- DNN Accelerator
- Makefile compile
- 컨벌루션 연산
- Pyverilog 설치
- Pyverilog 튜토리얼
- linux c 컴파일
- systolic array
- linux makefile 작성
- pygraphviz 설치 오류
- Pyverilog 실행
- 이진수 곱셈 알고리즘
- 대구 반도체 설계기업 특화
- AMBA
- gpgpu-sim
- Data HAzard
- gcc 컴파일
- CLOCK GATING
- pytest-pythonpath 설치 오류
- makefile
- Pyvrilog tutorial
- 클럭 게이팅
- CUDA
- Today
- Total
오늘은 맑음
[Linux] gcc를 이용한 컴파일 / Makefile study(3) 본문
프로젝트를 작성하다 보면 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를 수정해서 프로젝트를 계층화 해보았습니다.
'Makefile' 카테고리의 다른 글
[Linux] gcc를 이용한 컴파일 / Makefile study(2) (2) | 2021.04.03 |
---|---|
[Linux] gcc를 이용한 컴파일 / Makefile study(1) (0) | 2021.04.03 |