시스템 개발쪽이나 임베디드 쪽으로 관심이 많다면 꼭 한번 보시길!!
Auto build tool
Auto build tool - make와 같이 자동으로 build 시켜주는 도구를 의미한다.
makefile은 리눅스에서 makefile로 자동인식한다.
makefile
makefile 설정 해놓은 소스이다. 위의 사진처럼 CC변수를 gcc로 선언해 놓았다.
makefile 있을 때
makefile이 존재하면 make 시에 선언해놓은 것 처럼 gcc로 컴파일을 한다.
makefile 없을 때
makefile 파일을 지워보았다. make 시 기본인 CC로 컴파일 된다는 것을 알 수 있다.
makefile이용해서 clean 선언하여 지우기
:w (파일이름) - 다른이름으로 저장
TARGET = main TARGET을 main으로 정의 해준다.
:clean 다 지우기 위한 라벨.
@rm -rf(지워라 묻지말고) $(TARGET) 정의한 main 실행파일을 묻지도 따지지도 않고 지워라.
@rm -rf(지워라 묻지말고) $(TARGET).i
@rm -rf(지워라 묻지말고) $(TARGET).o
@rm -rf(지워라 묻지말고) $(TARGET).s 선언된 각 중간 파일들을 묻지도 따지지도 않고 지워라.
(TARGET) make하기 전
(TARGET) make 하고 나서
파일이 지워진 것을 확인할 수 있다.
makefile 그럴듯하게 써보자!!
각각 변수 선언을 해주고 나서 각각 라벨을 선언한다.
1. run: 라벨은 rebuild: 라벨 실행 후에 run: 라벨이 실행된다.
2. rebuild 라벨은 clean라벨을 실행하여 먼저 main, main.i, main.o, main.s를
묻지도 따지지도 않고 삭제 후에 build를 실행시키는데
3. build에서 begin과 end는 그냥 구분해주는 메시지이다. build에서 main.c를
컴파일 시켜준다.
4. 이렇게 rebuild 실행이 완료되면, main을 실행시켜서 위와 같이 실행화면이
출력된다.
makefile의 지능화 툴
main.c 13:40
main 13:41
main.c는 컴파일 시간이 41분이다. 고로 main.c는 수정되지 않았다.
이를 make는 알 수 있다. (시간으로 판단하여)
main.c를 갱신하기 전에 make를 해보았다.
main.c를 갱신하고 나서는
make는 시간으로 판단하여 갱신할 필요가 있는지 없는지 판단한다.
makefile에서 define하기
makefile에서 CFLAGS에 -DNUMBER=50을 삽입한다.
-DNUMBER=50은 어딘가에 있는 NUMBER를 50이라 define하겠다는 의미이다.
main.c에서 이전에 선언했던 define문을 주석처리한다.
저장하고, 밑에 처럼 make를 치면, 맨 위에 있는 run 라벨을 실행하는데
하기 전에 rebuild를 먼저 실행한다. 우선 실행파일(main) 및 중간파일(main.i, o, s)를
지우고, main.c를 컴파일하여 실행파일을 다시 만들면서 중간파일도 다시 생성한다.
그리고 실행을 시킨다.
위의 그림과 같이 makefile에서 NUMBER를 define하여 사용할 수 있다.
추가적으로!!
실제 source insight에서 makefile이 사용되는 예이다.
우리는 리눅스에서 동일하게 흉내내어 봤다.
clean 라벨의 begin과 end는 알 것이고, clean_list라벨에서
각 파일들을 소스파일 빼고 거의 다 지운다. ATMega128을 실습할 때 우리는
make파일을 사용하여 컴파일을 하였다. 기억나지?(make clean!!)
source insight에서 makefile을 이용한 define
위 그림과 같이 makefile에서 F_CPU를 16000000정의 하였고,
그 F_CPU를 이용해 smart.h에서 define시켜주었다.
CFLAGS 분할 정의
위 그림처럼 CFLAGS를 분할 정의하면 수정할 때도 편하고 관리도 편리하다는 CM의 말씀.
결론적으로 makefile에 대해서 모르면 무엇이 변수인지도 모르고, 사용할 줄도 모른다는 것이다. makefile은 겁나게 복잡할 뿐 하나하나 보면서 분석해나간다면, 어느 정도 파악할 수 있을 것이다. 결론은 열심히 하자는 말씀;;
허허..;; 나름 정리 했는데 빼먹은 부분있으면 말씀해주세요~
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
20140526 손병규 내용정리 (출석번호 14번) (10) | 2014.05.26 |
---|---|
20140523 업무일지13번 서상우 (14) | 2014.05.23 |
20140522 일일보고서 12번 (14) | 2014.05.22 |
20140521 업무일지11번 문대영 (10) | 2014.05.21 |
2014.05.19 김진철 업무일지 [번호 8] (12) | 2014.05.19 |
20140516 김재성 업무일지 7번 (16) | 2014.05.16 |
2014.05.16 ATmega128 SRF05(초음파센서)를 이용한 거리 측정 (0) | 2014.05.16 |
2014년 5월 15일[스승의날] 김용우 - 수업일지 (14) | 2014.05.15 |