Make

김상우·2022년 7월 4일
0

Docker

목록 보기
6/8
post-thumbnail

카테고리는 도커의 우분투 컨테이너에서 다운로드 받았기 때문에 docker 카테고리로 넣었다.

Make / Makefile

  • Make : 파일 간의 종속관계를 파악하여 makefile파일에 적혀있는데로 컴파일러에 명령하여 쉘이 순차적으로 실행
  • Makefile : 목적파일, 의존성, 매크로 등을 활용하여 컴파일을 쉽게하기 위해 사용하는 make파일의 설정파일

설치

  • makefile을 활용하기 위해서는 일단 컴파일러와 make의 설치가 필요하다.
    도커에 다운로드한 우분투 이미지에 그대로 활용 할 예정이므로 해당 환경에서 설치했다.
apt-get install gcc
apt-get install make

자주 사용하는 매크로

  • 매크로
매크로용도
DEFSDefine 추가
CC컴파일러 지정
CFLAGSgcc 옵션 추가
CPPFLAGSc++ 옵션 추가
CXXc++ 컴파일러 추가
LDFLAGSld 옵션 추가
cleanMakefile 실행 후 삭제 할 파일 목록
CC = gcc  // 매크로 정의

target1 : dependency1 dependency2 // 룰 1
	command1 // 룰 1의 명령 1
    command2 // 룰 1의 명령 2
target2 : dependency1 dependency2 // 룰 2
	command1 // 룰 2의 명령 1
    command2 // 룰 2의 명령 2
  • 내부 매크로
매크로용도
$*확장자를 제외한 현재 목표 파일 이름
$@현재의 목표 파일의 이름
$<현재의 필수 조건 파일 중 첫번째 파일 이름
$^현재 모든 필수조건 파일들
$?현재 목표 파일보다 최근에 변경된 파일 이름

사용 예시

모든 예시는 main.c, input.c, output.c 파일이 있다는 것을 가정하여 작성했다.

  • Make 파일 활용 예시
# Makefile

program : main.c input.c output.c
	gcc -o program main.o input.o output.o

main.o : io.h main.c
	gcc -c main.c

input.o : io.h input.c
	gcc -c input.c

output.o : io.h output.c
	gcc -c output.c
  • 매크로 활용 예시
# Makefile

OBJECTS = main.o input.o output.o
CC = gcc

TARGET = program

$(TARGET):$(OBJECTS)
	$(CC) -o $(TARGET) $(OBJECTS)
    
clean :
	rm -rf $(OBJECTS) $(TARGET) core
    
main.o : io.h main.c
	gcc -c main.c
input.o : io.h input.c
	gcc -c input.c
output.o : io.h output.c
	gcc -c output.c

컴파일할 대상이 많으면 명령어가 굉장히 길어지기 때문에 makefile을 사용하는 것이 편리하다.
아직 알아야할 것이 많지만 매크로 규칙을 잘 따르면서 makefile을 작성하면 보다 간편하게 컴파일을 할 수 있을 것이다.

profile
아침엔 운동하고 밤엔 잠을 잔다.

0개의 댓글