구분종류역할
make빌드 자동화 프로그램Makefile을 읽고 명령어 실행
Makefile빌드 설정 텍스트 파일실행할 명령어와 의존성 규칙 정의
gcc, clangC 컴파일러C 소스코드를 컴파일하여 실행 파일 생성
run.cC 소스 파일개발자가 작성한 C 프로그램
run실행 파일컴파일된 프로그램

CC = gcc
 
.PHONY: run
run: run.c
	$(CC) -O3 -o run run.c -lm
	$(CC) -O3 -o runq runq.c -lm
 
rundebug: run.c
	$(CC) -g -o run run.c -lm
	$(CC) -g -o runq runq.c -lm
 
.PHONY: runfast
runfast: run.c
	$(CC) -Ofast -o run run.c -lm
	$(CC) -Ofast -o runq runq.c -lm
 
.PHONY: runomp
runomp: run.c
	$(CC) -Ofast -fopenmp -march=native run.c  -lm  -o run
	$(CC) -Ofast -fopenmp -march=native runq.c  -lm  -o runq
 
.PHONY: win64
win64:
	x86_64-w64-mingw32-gcc -Ofast -D_WIN32 -o run.exe -I. run.c win.c
	x86_64-w64-mingw32-gcc -Ofast -D_WIN32 -o runq.exe -I. runq.c win.c
 
.PHONY: rungnu
rungnu:
	$(CC) -Ofast -std=gnu11 -o run run.c -lm
	$(CC) -Ofast -std=gnu11 -o runq runq.c -lm
 
.PHONY: runompgnu
runompgnu:
	$(CC) -Ofast -fopenmp -std=gnu11 run.c  -lm  -o run
	$(CC) -Ofast -fopenmp -std=gnu11 runq.c  -lm  -o runq
 
.PHONY: test
test:
	pytest
 
.PHONY: testc
testc:
	pytest -k runc
 
VERBOSITY ?= 0
.PHONY: testcc
testcc:
	$(CC) -DVERBOSITY=$(VERBOSITY) -O3 -o testc test.c -lm
	./testc
 
.PHONY: clean
clean:
	rm -f run
	rm -f runq

1. 컴파일러 설정

CC = gcc
  • CC: C 컴파일러를 지정하는 변수
  • gcc: GNU C 컴파일러

2. 기본 빌드

.PHONY: run
run: run.c
	$(CC) -O3 -o run run.c -lm
	$(CC) -O3 -o runq runq.c -lm
  • .PHONY: 파일 존재 여부와 관계없이 항상 실행하는 작업으로 선언
  • run: run.c: Target(run)과 Dependency(run.c) 정의
  • $(CC): 지정된 컴파일러 사용
  • -O3: 높은 수준의 컴파일 최적화
  • -o: 생성할 실행 파일 이름 지정
  • -lm: 수학 라이브러리 링크 실행: make run → run, runq 실행 파일 생성

3. 주요 빌드 옵션

명령어주요 옵션목적
make run-O3기본 최적화 빌드
make rundebug-g디버깅 정보 포함
make runfast-Ofast공격적인 성능 최적화
make runomp-fopenmpOpenMP 병렬 처리
make cleanrm -f생성된 실행 파일 삭제

핵심 컴파일 옵션

  • -O3: 높은 수준의 성능 최적화
  • -Ofast: 일부 부동소수점 연산 규칙을 완화하는 추가 최적화
  • -g: 디버깅 정보 생성
  • -fopenmp: OpenMP 병렬 처리 활성화
  • -march=native: 현재 CPU에 맞춘 명령어 최적화

4. 실행 과정

make run
   ↓
Makefile의 run 작업 실행
   ↓
gcc로 run.c, runq.c 컴파일
   ↓
run, runq 실행 파일 생성
   ↓
./run stories15M.bin
   ↓
Transformer 추론 실행