Makefile 을 구성하는 make 문법


Makefile 을 구성하는 기본적인 요소는 아래와 같습니다.


target : dependencies ...

command ...

...


만들려는것 : 만드는데 필요한 구성물

만들기 위해 필요한 명령 1

만들기 위해 필요한 명령 


예를 들어보자면


bicycle: handle.o frame.o wheel.o

gcc -o bicycle handle.o frame.o wheel.o

handle.o: handle.c

gcc -c handle.c

frame.o: frame.c

gcc -c frame.c

wheel.o: wheel.c

gcc -c wheel.c


이렇게 만든 Makefile 을 실행하면


$ make 또는 make bicycle

gcc -c handle.o

gcc -c frame.o

gcc -c wheel.o

gcc -o bicycle handle.o frame.o wheel.o


와 같이 실행됩니다.


주의 1 : 명령어를 쓰는 줄에서는 문장 처음에 TAB key 가 반드시 사용되어야 합니다.

주의 2 : 명령어를 쓰는 줄에서 마지막에 \ 를 사용하지 않고 두줄의 명령어를 사용하면 각각의 명령어가 독립적인 쉘에서 실행 됩니다.


mkdir1 :

mkdir first

cd first

NEXT_DIR=./second

mkdir $NEXT_DIR


이것의 실행 결과는 current folder 에 first 와 second 라는 폴더가 생성됩니다.


mkdir2 :

mkdir first; \

cd first; \

NEXT_DIR=second; \

mkdir $$NEXT_DIR


이것의 실행 결과는 .\first\second\ 의 폴더가 생성됩니다. $$ 를 사용하였음을 주의 하여야 합니다.

$NEXT_DIR 로 사용할 경우 EXT_DIR 로 인식합니다.


문장의 끝은 ; 로 표시하고 \ 로 동일 쉘에서 실행되도록 합니다.



$ make 만들려는것


의 형식으로 명령어를 사용하면 되는 것 입니다. 아래의 예를 보세요.


$ make wheel.o


특정 Makefile 을 지정할 경우 -f 옵션을 사용하면 됩니다.


$ make -f Makefile.etc wheel.o


그럼 파일이 많을 경우 일일이 모든 파일들을 추가 할 수 없습니다. 이럴때 사용하는 문법을 알아보겠습니다.


%.o: %.c

gcc -c -o $@ ${CFLAGS} $<


% : 모든 파일을 나타냅니다. (%.c 는 모든 *.c 를 의미 하는 것 입니다.)

$ : 변수를 나타내는 기호입니다.

$@ : 출력될 파일이름을 나타내는 것인데 "만들려는 것"에 해당하는 %.o 로 치환 됩니다.

$< : 입력파일

$* : 입력파일에서 확장자를 뗀 파일명을 나타냅니다.


${CFLAGS} 는 shell 에서 컴파일 옵션을 줄 수 있도록 하는 부분입니다. "${}" 는 쉘의 변수값을 나타냅니다.


$ make CFLAGS="-g"


와 같이 사용하여 옵션을 사용할 수 있습니다.


Makefile 내부에서 실행되는 명령어를 보이지 않게 하기 위해서는 명령어 앞에 @를 붙이면 됩니다.


이상 간략하게 알아본 Makefile 문법이였습니다.




Posted by 인포개더러
,