Makefile

GAON PARK·2023년 11월 14일
  1. 코드 변경이 잦은 build 자동화 스크립트 작성에 필수
  2. 변경 사항이 일어난 것만 적용

장점

  1. build 자동화
  2. build 속도 최적화
    1. 불필요한 compile & assemble 피하기

설치

sudo apt install make -y

사용 방법

  1. Makefile 이라는 스크립트 파일 생성
    1. make 문법에 맞추어서 작성
    2. Bash Shell Script 문법과 다름
  2. 스크립트 실행
    1. 명령어: make
# Makefile

bluepink: blue.o pink.o main.o
	gcc blue.o pink.o main.o -o bluepink

blue.o: blue.c
	gcc -c blue.c

pink.o: pink.c
	gcc -c pink.c

main.o: main.c
	gcc -c main.c

makedepend

입력한 c 파일을 분석하여 의존성 헤더파일을 등록해주는 make 도우미

# 설치
sudo apt install xutils-dev

# 실행
# -Y 옵션: 분석할 파일 경로를 현재 디렉토리로 함
makedepend test1.c test2.c test3.c -Y

make script

명령어

  • @ : 수행할 명령어 입력을 생략하고 결과만 출력 -> 두 번 출력 막음
  • # : 주석
  • 매크로(변수)
    - $() 로 사용
    - 쌍따옴표까지 글자 그대로 들어감
    - 정의되지 않은 매크로는 빈칸으로 출력
    - += 대입 기호
    - 기호로 매크로 내용에 추가할 때마다 띄어쓰기 한 칸 자동 추가
    - := 대입 연산자 (Simple Equl)
    - script 순서대로 현재 기준에서 값을 넣음
    - = 대입 연산자 (Reculsive Equl)
    - 최종 변수 결과 값을 넣음
  • echo : 한 개의 띄어쓰기만 허용
  • $@ : Target
  • $^ : 의존성 파일
  • $< : 의존 파일 중 첫 번째 파일
# 최종 Makefile

CC = gcc 
CFLAGS = -g -Wall -O2 
SRCS = $(wildcard *.c) 
OBJS = $(SRCS:.c=.o) 
.SUFFIXES : .c .o 
TARGET = result 
 
all: $(OBJS) 
    @echo "==<FINISH>==" 
    $(CC) -o $(TARGET) $^ 
 
#.c .o: 
#   @echo "==[READY]==" 
#   $(CC) $(CFLAGS) -c $< 
 
clean: 
    rm $(OBJS) $(TARGET) 
 
dep: 
    makedepend $(SRCS) -Y 
 
 
# DO NOT DELETE 
 
test2.o: a.h c.h 
test3.o: a.h b.h c.h 
test1.o: a.h b.h

CMake

Makefile 을 자동 생성 할 수 있는 Build System

설치

sudo apt install g++ cmake -y

사용 방법

# 정확히 CMakeLists.txt 파일 생성
# 아래 내용 추가
ADD_EXECUTABLE([최종적으로 만들어질 실행 파일 이름] main.c blue.c pink.c)

# 실행
cmake.

# 이후 make 통해 build

0개의 댓글