1. 문제점
Makefile 이 복잡해졌는데 이해할 수가 없어서 따로 공부함.
2. Makefile 기본 사용법
http://kyagrd.dyndns.org/wiki/GNUMake
http://wiki.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make.html#toc7 (GNU-Make 강좌)
http://forum.falinux.com/zbxe/?document_srl=405822 (읽어볼것, Makefile-1)
http://forum.falinux.com/zbxe/?document_srl=405824&mid=gcc (Makefile-2)
http://developinghappiness.com/?page_id=222 (Make 기반 빌드 시스템)
makefile의 구조 및 이용방법-maenong[1].pdf
3. Makefile 내부 매크로
여러개가 있는데, 몇개만 살펴보자면
(참조 - http://blog.naver.com/PostView.nhn?blogId=signal97&logNo=112789758)
main : a.c b.c c.c 에서
- $^
: 모든 의존 대상 (a.c b.c c.c)
- $<
: 첫번째 의존 대상 (a.c)
- $@
: 현재 표적(타겟), (main)
/temp/target.o : usr/local/c/test.c 에서
- $(@D)
: 타겟의 디렉토리 (/temp)
- $(@F)
: 타겟의 파일 (target.o)
- $(<D)
: 첫번째 의존대상의 디렉토리
- $(<F)
: 첫번째 의존 대상의 파일
* 참고로 매크로에서는 * 를 통해 와일드 카드 확장이 일어나지 않음
SOURCE = *.c 는 안됌!
SOURCE = $(wildcard *.c)
4. Makefile 확장자 규칙 (참조 - http://codecooking.tistory.com/91 (읽어볼것!)) 확장자 규칙은, 정의만 해 논다면 %.o : %.c gcc -c -o %@ %< 확장자 규칙에 좌측에 오는 확장자(.o)들을 만들기 위해 오른쪽에 요구된 파일(.c)들을 지정된 명령에 따라 처리함. <Makefile 코드> SOURCE = $(wildcard *.txt) all: target %.o: %.txt target : $(OBJECT)
<Make 실행 결과> $ make
OBJECT = $(SOURCE:.txt=.o)
@echo '[SUFFIXES]'
@echo -n '$$? : '
@echo $?
@echo -n '$$^ : '
@echo $^
@echo -n '$$@ : '
@echo $@
@echo -n '$$< : '
@echo $<
@echo -n '$$* : '
@echo $*
@echo -n '[target] $$? : '
@echo $?
@echo -n '[target] $$^ : '
@echo $^
[SUFFIXES]
$? : sun.txt
$^ : sun.txt
$@ : sun.o
$< : sun.txt
$* : sun
[SUFFIXES]
$? : moon.txt
$^ : moon.txt
$@ : moon.o
$< : moon.txt
$* : moon
[target] $? : sun.o moon.o
[target] $^ : sun.o moon.o
[target] $< : sun.o
[target] $@ : target
5. Makefile 내부 함수
http://www.viper.pe.kr/docs/make-ko/make-ko_8.html (Functions for Tansforming Text, 번역본)
http://k-story.tistory.com/227 (읽어볼 것)
우리 책에서는 patsubst, wildcard 와 같은 함수가 나옴..
6. Advanced Makefile
http://www.hanb.co.kr/network/view.html?bi_id=351
'CLKH64 OS > 07장' 카테고리의 다른 글
7장 대략적인 설명 (2) | 2013.01.07 |
---|---|
파이썬으로 만든 ImageMaker (0) | 2013.01.02 |
링커스크립트 (0) | 2013.01.01 |