2010년 8월 25일 수요일

A special character in MAKEFILE

본 문서는 Makefile의 특수문자의 의미에 대해서 기술 한다.

1. Makefile 특수 문자

 $@  현재 만들고 싶은 Output 이름
 $^  재료들의 이름

예)
===========================================================================
TARGET=spaghetti.bin
ELF_TARGET=spaghetti.elf
BINTOOL=fromelf
CC=tcc

$(TARGET): $(ELF_TARGET)
$(BINTOOL) -bin -o $@ $^              --------------> ①

$(ELF_TARGET): spaghetti.o manipulation.o
$(CC) -o $@ $^                             --------------> ②

spaghetti.o: spaghetti.c
$(CC) -c @^                                  --------------> ③

manupulation.o: manupulation.c
$(CC) -c @^                                  --------------> ④
===========================================================================

① $@ : spaghetti.bin
    $^  : spaghetti.elf
② $@ : spaghetti.elf
    $^  : spaghetti.o manipulation.o
③ $@ : spaghetti.o
    $^  : spaghetti.c
④ $@ : manipulation.o
    $^  : manipulation.c

2. 추가 특수 문자

"=" 와 ":="의 차이

TEMP := $(CC) temp
CC = tcc
위와 같은 문법으로 되어 있다면 TEMP에는 무엇이 들어 있을까요?
TEMP == temp 이와 같이 됩니다.

CC = tcc
TEMP := $(CC) temp
위와 같은 문법으로 되어 있다면 TEMP에는 무엇이 들어 있을까요?
TEMP == tcc temp 이와 같이 됩니다.

TEMP = $(CC) temp
CC = tcc
위와 같은 문법으로 되어 있다면 TEMP에는 무엇이 들어 있을까요?
TEMP == tcc temp 이와 같이 됩니다.

"?="와 "+="
CC?=tcc
CC+=gcc
CC?=cc

CC에는 값이 어떻게 들어 있는가?
CC == "tcc gcc"
이렇게 들어 있습니다.

이유는 ?=는 CC가 선언되어 있지 않으면 선언하는 것입니다.
+=는 공백을 포함하여 CC에 내용을 추가합니다.
따라서, 결과는 "tcc gcc"입니다.

@명령

all :
        @echo "It's me! make"
결과 :
        It's me! make

all :
        echo "It's me! make"
결과 :
        echo It's me! make
        It's me! make

댓글 없음:

댓글 쓰기