Makefile 문법 쉽게 설명하기. (make file 문법 설명)
안드로이드를 공부하거나 Linux 또는 Ubuntu kernel 등을 공부 하려는 사람은 Makefile 문법에 대해 알고 있어야 합니다. 간단히 프로그래밍을 공부하는 사람도 Makefile 을 작성할 수 있으면 build 과정을 보다 쉽게 끝낼 수 있습니다.
그럼 Makefile을 만드는 방법과 문법에 대해 알아 보겠습니다.
Makefile 의 기본은 만들려는 것과 그에 필요한 구성물을 나열하는 것 입니다.
TargetObject : dependencies_1, dependencies_2
command args1 args2 args3
이를 풀어 설명하자면
만들것 : "만들것"을 만드는데 필요한 구성요소
만들기 위해 필요한 명령 1
만들기 위해 필요한 명령 2
그럼 실제 예로 들어보겠습니다.
car : body.o engine.o wheel.o
gcc -o car body.o engine.o wheel.o
body.o : body.c
gcc -c body.c
engine.o : engine.c
gcc -c engine.c
wheel.o : wheel.c
gcc -c wheel.c
이 내용을 Makefile 이라는 파일로 저장 후 저장된 폴더에서 make 라고 실행하면 빌드가 실행 됩니다.
실행 순서는
gcc -c body.o
gcc -c engine.o
gcc -c wheel.o
gcc -o car body.o engine.o wheel.o
순서 입니다.
Makefile 을 좀더 세분화 해서 사용하려면 아래의 내용을 참고하면 됩니다.
body.o 만을 만들고 싶을 경우
$ make body.o
기본 Makefile 이 아닌 다른 이름의 Makefile 을 사용하고 싶은 경우 -f 옵션으로 실행 가능합니다.
$ make -f otherMakefile body.o
여러개의 파일들을 한꺼번에 빌드하고 싶을 경우 % 를 사용하면 됩니다.
%.o : %.c
gcc -c -o $@ ${CFLAGS} $<
위의 실행 명령 부분을 보면 여러가지 문법이 적용되어 있습니다.
%.o : %.c 는 폴더내 모든 .c 파일에 대해 .o 파일을 만들며
-o $@ 실제 최종 목적물의 이름을 나타냅니다.
${CFLAGS} 는 CFLAGS 라는 쉘 변수를 넣어주어 실행시 컴파일 옵션을 조정할 수 있도록 해 줍니다.
$< 는 %.c 의 파일들이 들어갑니다.
Make 명령 실행시 Standard out 으로 메시지를 출력하지 않으려면 @ 옵션을 붙여 명령을 실행하면 됩니다.
Makefile 에서 Shell 명령어(쉘 명령어)를 실행 시키고자 할 경우
shellcommand :
ls -al
위 와 같이 Makefile 을 작성 후 아래 처럼 명령을 실행 시키면 됩니다. 실행 command 적는 곳에 그냥 shell command 를 써주기만 하면 됩니다.
$ make shellcommand
주의 하여야 할 점은 Makefile 에서 한 폴더에서 같은 명령을 모두 실행 해야 할 경우. 예를 들어 cd 명령으로 폴더를 이동했다면 명령어 끝에 \ 를 적어주고 다음줄에 새로운 명령을 써야 cd 로 폴더 이동한 곳에서 다음 명령이 실행 됩니다.
shellcommand :
mkdir temp; \
cd temp; \
touch test.txt; \
NEW_DIR=temp2; \
mkdir $$NEW_DIR;
\ 가 빠지면 test.txt 파일은 temp 폴더 내부가 아닌 Makefile 이 있는 폴더에 만들어지게 됩니다.
그리고 NEW_DIR 이라는 변수를 사용하려면 $$ 를 붙여 사용하여야 합니다.
; 는 같은 폴더에서 실행해야 하는 명령어가 아니라 \ 가 없다면 생략해도 됩니다.
또 하나의 주의할 점은 TargetObject를 만들기 위해 실행 명령을 쓸때 제일 앞에 반드시 <TAB> 문자를 넣어 주어야 한다는 것 입니다. TAB 으로 명령과 Object 를 구별하게 됩니다.
이상 Makefile 문법 쉽게 설명하기. (기본적인 make file 문법 설명)에 대한 글 이였습니다.
Ubuntu (Linux) 에서 CPU 정보, Memory 정보, PC 이름, kernel version 알아내기. (0) | 2014.02.24 |
---|---|
우분투에서 삼바 folder mount(마운트) 하기 / 공유폴더 디스크로 연결하기 (0) | 2014.02.22 |
Ubuntu 에서 Secure Shell ssh terminal 사용시 id 지정하기와 ssh 명령어 option (0) | 2014.02.07 |
ssh pub key 서버 로그인 간단히 하기 및 ssh key 생성 및 등록 방법 (0) | 2014.02.06 |
Pushd popd 명령어 사용법 (0) | 2013.11.30 |