일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 차량통신
- UART통신
- 기본 문법
- OBD모듈
- 아두이노우노
- OBD
- can 통신
- vscode
- RX
- TX
- 시리얼통신
- SoftwareSerial
- platformIO
- 양방향 통신
- 아두이노레오나르도
- 자동 변수
- 시리얼 통신
- 시리얼모니터
- Makefile
- 송수신
- UART
- 디바이스마트
- 시리얼포트
- txrx
- SPI 통신
- Serial통신
- 공모전
- 디지털핀
- 아두이노
- 마스터 슬레이브
- Today
- Total
개발 블로그
[Makefile] Makefile 코드의 순서 본문
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 을 만들 때는 항상 이 점을 주의하면서 만들자.
'개발 > Makefile' 카테고리의 다른 글
[Makefile] makefile 에서 사용하는 다양한 함수 (0) | 2022.01.22 |
---|---|
[Makefile] Phony? 가짜 파일? (0) | 2022.01.21 |
[Makefile] 기본 문법과 자주 사용하는 자동 변수 (0) | 2022.01.21 |