카테고리는 도커의 우분투 컨테이너에서 다운로드 받았기 때문에 docker 카테고리로 넣었다.
도커에 다운로드한 우분투 이미지에 그대로 활용 할 예정이므로 해당 환경에서 설치했다.
apt-get install gcc
apt-get install make
매크로 | 용도 |
---|---|
DEFS | Define 추가 |
CC | 컴파일러 지정 |
CFLAGS | gcc 옵션 추가 |
CPPFLAGS | c++ 옵션 추가 |
CXX | c++ 컴파일러 추가 |
LDFLAGS | ld 옵션 추가 |
clean | Makefile 실행 후 삭제 할 파일 목록 |
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 파일이 있다는 것을 가정하여 작성했다.
# 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을 작성하면 보다 간편하게 컴파일을 할 수 있을 것이다.