프로그래밍/기타

Make, Makefile 사용법 요약

산을좋아한라쯔 2016. 11. 23. 09:07
반응형

Makefile에 대한 상세 정보는,

  영문메뉴얼: http://www.gnu.org/software/make/manual/html_node/index.html#SEC_Contents

  한글메뉴얼: http://korea.gnu.org/manual/4check/make-3.77/ko/make_1.html


기본구조 요약

-----------------------------------------------------------------------------------------------------

구성 요소: Target, Dependency, Command, Comments

Target : Dependency

Command


Target, Dependency: 파일명 (아니면 PHONY)

Command: 반드시 Tab 다음


Comments는,

#This comment will not be displayed.

 #This comment will be displayed


ex)

hse_util.o : hse_util.c hse_util.h

gcc -c -o hse_util.o hse_util.c

----------------------------------------------------------------------------------------------


설명

Makefile의 주 구성요소는 'Target' Dependency' Command' 'Comments' 이다.


Target과 Dependency는 파일명을 지칭하는게 일반적인데, 만약 파일이 아니라면 PHONY라는 키워드로 지정해주는 게 좋다.


Command는 반드시 탭 다음에 와야한다. 즉, 해당 줄의 맨 처음에 바로 오는 것은 Target 혹은 주석(Comments)이 오고, 실제 명령어는 탭키를 쳐서 공백을 만들고 적어야 한다.


Comments(주석)을 달고 싶을 때는 '#'기호를 사용하면 되는데, 공백없이 #이 오면, Makefile이 수행될 때 이 주석자체가 안보이고, 공백을 두고 #을 사용하면 Makefile이 수행될 때 이 주석내용이 표출되게 된다.


gcc를 이용해서 C 소스를 컴파일하는 전형적인 구조를 보면 다음과 같다.

hse_util.o : hse_util.c hse_util.h

gcc -c -o hse_util.o hse_util.c

'hse_util.o'가 Target이다.

hse_util.c 와 hse_util.h가 Dependency가 되고,

"gcc -c -o hse_util.o hse_util.c"가 Command가 된다. 

의미는, Target으로 되어 있는 hse_util.o파일이 Dependency로 되어 있는 hse_util.c hse_util.h 파일보다 out of date이면, Command인 "gcc -c -o hse_util.o hse_util.c"를 수행



변수사용에 대한 요약

- 대소문자 구분함

- 설정 방법: 변수명 = 값

- 사용 방법: $(변수명)

- 약속된 변수: $@ $< $^  (더많는 약속변수는 여기 참조)

   $@ : target rule

   $< : first dependency

   $^ : all dependencies

ex)

    CC = gcc

    hse_util.o : hse_util.c hse_util.h

    $(CC) -c -o $@ $<





-끝-

반응형