Makefile

2022. 3. 25. 07:41리눅스

처음에 학교에서 들었을 땐 뭐지..? 싶었는데,

유튜브 설명들으니까 그제서야 아 이거구나 싶었다..

까먹기전에 이해한대로 정리해본다..

 

리눅스의 Makefile 기능은 컴파일, 링크 과정을 단순화 시키기 위해서 쓰는 것이다.

 

컴파일할 소스파일들이 있는 경로에 Makefile이라는 파일을 만들고 작성한 후에,

make 명령어를 치면 Makefile 내용에 근거해서 실행 파일을 만들 수 있다.

 

Makefile의 기본 문법은

Target : Dependency

    command

이다.

 

Target은 작업할 대상, Dependency는 이 작업을 위해 필요한 것이다.

 

예를 들어서 test.c를 컴파일해서 test라는 실행 파일을 만들기 위해서는

test: test.c
   gcc -o test test.c

라고 작성하면 된다.

 

파일의 맨 처음 부분에

all : test test2 라고 하면,

target이 test와 test2인 부분에 가서 코드를 실행시킨다.

 

all을 쓰는 이유는,

test.o: test.c
 gcc -c test.o test.c

test: test.o
 gcc -o test test.o

다음과 같이 Makefile을 작성하면 오브젝트파일만 생성하고 끝나버린다.

all: test

test.o: test.c
 gcc -c test.o test.c

test: test.o
 gcc -o test test.o

이렇게 지정해주어야 코드의 순서와 상관없이 원하는 결과를 낼 수 있다.

 

 

변수도 사용할 수 있는데,

프로그래밍 언어에서의 변수처럼 어떤 문구에 대해서 치환하는 느낌으로 사용한다. (코드의 유연함)

gcc라는 문구를 CC라는 변수로 치환해놓고 싶다면,

CC = gcc
all: test

test.o: test.c
 $(CC) -c test.o test.c

test: test.o
 $(CC) -o test test.o

이런 식으로 정의하고, $(var) 형태로 사용하면 된다.

 

또한 target을 $@로, dependency를 $^로 치환할 수 있다.

CC = gcc
all: test

test.o: test.c
 $(CC) -c $@ $^

test: test.o
 $(CC) -o $@ $^

 

'리눅스' 카테고리의 다른 글

i-node, hard link, symbolic link  (0) 2022.03.25