Makefile 을 구성하는 make 문법
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 문법이였습니다.