일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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++ 컴파일
- Pyverilog 설치
- 딥러닝 가속기
- pytest-pythonpath 설치 오류
- gcc 컴파일
- 남산업힐
- Pyvrilog tutorial
- systolic array
- 클럭 게이팅
- Data HAzard
- 대구 반도체 설계기업 특화
- pyverilog 설치 오류
- Design DNN Accelerator
- gpgpu-sim
- 이진수 곱셈 알고리즘
- Makefile compile
- 컨벌루션 연산
- AMBA
- Pyverilog 실행
- linux c 컴파일
- CUDA
- DNN Accelerator
- DNN 가속기
- pygraphviz 설치 오류
- 데이터 해저드
- linux makefile 작성
- Pyverilog 튜토리얼
- CLOCK GATING
- makefile
- CDC
- Today
- Total
오늘은 맑음
[Linux] gcc를 이용한 컴파일 / Makefile study(2) 본문
이번에는 makefile을 실제로 작성 해보겠습니다.
먼저 linux환경이 필요한데, linux환경 없이 window만 사용하신 분은 본 블로그의 wsl 설치 포스팅을 참조하시기 바랍니다.
pwd에는 다음과 같이 구성해줍니다.
- Makefile
- src(directory)
- bin(directory)
src에는 main함수를 포함한 다양한 source 파일들이 들어있고, bin에는 만들어진 실행파일이 들어갑니다. src 폴더에는 현재 hello를 출력하는 main.c와 world를 출력하는 world.c, world.h파일 총 세개가 있습니다.
작성된 makefile은 아래와 같습니다.
CC := gcc (c파일을 컴파일 한다면 gcc, c++을 컴파일 한다면 g++ 컴파일러를 선택하시면 됩니다.)
CFLAGS = -Wall -g
TARGET = bin/helloworld
SRC_DIRS = src
SRCS = \$(foreach dir, \$(SRC_DIRS), \$(wildcard $(dir)/*.c))
OBJS = \$(SRCS: .c=.o)
all : clean $(OBJS)
\$(CC) -o \$(TARGET) \$(OBJS)
clean :
rm -f $(OBJS)
rm -f $(EXE)
CFLAGS: gcc 컴파일 옵션을 넣어줍니다. 현재 옵션은 -Wall과 -g 두개 입니다.
-Wall : 모호한 코드에 대해서 경고를 보냄
실제로 Wall 옵션이 들어간 상태에서 컴파일 한 실행파일을 실행하면 warning으로 경고를 보내줍니다.
-g : 디버그 정보를 추가
이 외에도 많은 옵션이 있습니다.(-O : 컴파일 최적화 등등...)
LDFLAGS : 현재 공유라이브러리를 사용하지 않기 때문에 제외
TARGET : bin파일 경로와 생성될 실행파일의 이름을 저장
SRC_DIRS : src파일이 들어있는 경로. 위에서 언급한 대로 src파일을 경로로 저장.
SRCS : SRC_DIRS로 들어가서 내부의 모든 *.c파일의 정보를 담습니다. foreach는 반복문 매크로로 foreach dir, $(SRC_DIRS)에 있는 directory를 차례대로 들어갑니다. 이 후 *.c 확장자의 파일 정보를 모두 SRCS에 담습니다.
OBJS : object파일의 정보. 여기서는 (SRCS.c=.o)라는 매크로를 이용. SRCS에 들어있는 모든 .c 확장자를 .o로 변환해서 OBJS에 저장 ex) SRCS에 main.c가 담겨있다면 OBJS에 main.o를 저장.
그 다음에는 all과 clean이 있습니다.
all은 make all을 수행하면 동작하는 명령어들이며, clean은 make clean을 수행하면 동작하는 명령어입니다.
make all
: 기존의 오브젝트 파일을 삭제. 새로 만들면 overwrite가 되긴 하지만 새로 컴파일 한다면 기존의 오브젝트 파일은 필요 없으므로 혼란을 피하기 위해 삭제.
이 후 gcc, TARGET과 컴파일에 사용되는 OBJS파일을 이용해서 실행파일을 생성.
make clean
: source 코드를 제외한 모든 오브젝트 파일과 실행파일을 삭제.
이렇게 makefile을 작성한 후 make를 수행하면 src 폴더 내에 오브젝트 파일이 생성됩니다.
또한 bin에 helloworld라는 실행파일이 생깁니다.
그리고 위의 실행파일을 실행시키면 아래와 같이 출력됩니다.
'Makefile' 카테고리의 다른 글
[Linux] gcc를 이용한 컴파일 / Makefile study(3) (0) | 2021.04.17 |
---|---|
[Linux] gcc를 이용한 컴파일 / Makefile study(1) (0) | 2021.04.03 |