개발 블로그

[Makefile] Makefile 코드의 순서 본문

개발/Makefile

[Makefile] Makefile 코드의 순서

영글어가다 2022. 1. 21. 23:49

Makefile 은 코드의 순서에 따라 진행되는 정도가 다르다.

예를 들어 main.c 라는 파일을 main.o 로 만들고, main 이라는 실행 파일을 만드는 Makefile을 만들어보자.

 

코드에는 두가지 행동을 하는 코드가 들어간다.

 

1. 실행 파일을 만드는 코드

main : main.o

     gcc main.o -o main

 

2. 목적 파일을 만드는 코드

main.o : main.c

     gcc -c main.c

 

목적 파일 코드가 먼저 실행되는 코드

어떤 결과가 나올까? 아래 코드를 Makefile 에 넣고 터미널에서 make 를 해보자.

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

다음과 같이 main.o 가 먼저 실행되면 main.o 코드의 command만 실행하고 종료하는 것을 볼 수 있다.

 

실행 파일 코드가 먼저 실행되는 코드

어떤 결과가 나올까? 아래 코드를 Makefile 에 넣고 터미널에서 make 를 해보자.

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

 

다음을 보면 2가지 명령을 모두 실행하는 것을 확인할 수 있다.

 

목적 파일 코드가 먼저 실행되는 경우, 실행되는 시점에는 폴더에 main.o 가 존재하지 않는다.

그렇기 때문에 실행 파일 코드로 넘어가는 것을 볼 수 있다.

 

목적 파일 코드는 gcc -c main.c 이다. 현재 시점에 main.c 가 존재하고 컴파일을 실시한다.

그래서 main.o 가 생성되고, 다시 실행 파일 코드로 넘어간다.

 

현재 시점에 main.o 가 생성되었기 때문에 gcc main.o -o main 을 실행하고

main 이름의 실행 파일이 생성된다.

 

이를 미루어 보아 Makefile 는 위에서부터 아래로 코드를 순차적으로 읽는데,

위쪽에 있는 명령어를 실행할 수 없는 상황일 때, 아래쪽을 훑어보는 것을 알 수 있다.

 

반대로 얘기하면, 위쪽에 있는 코드가 실행되면 아래쪽에 있는 실행되지 않는다는 것이다.

Makefile 을 만들 때는 항상 이 점을 주의하면서 만들자.