Embedded 실습/환경설정
make 명령어와 makefile
중동콜링
2013. 4. 22. 17:22
* make 명령어
make 명령어란 Unix/Linux 시스템에서 포함되어 있는 명령어로,
makefile이라는 파일을 참조하여 빌드하는 명령어이다.
(Windows에서도 nmake라고 똑같은 기능을 하는 명령어가 존재한다.)
makefile 은 컴파일 시의 다양한 옵션을 정리해놓은 파일로 script 언어의 문법적 특성을 지닌다.
이렇게 make명령어를 수행하면 makefile의 옵션을 참조하여 컴파일 하므로,
매번 엄청나게 긴 옵션을 주거나 여러 파일을 컴파일 해야할 때 유용하다.
< makefile의 예 >
01 #CC: 변수 $(CC): CC의 값
02 CC = cl
03 CCFLAGS= -Wall
04 # label: label사이에 반드시 enter
05 # all: 아무 것도 안쳤을때 수행
06 all: main msg
07 # (tab) 다음의 명령어를 수행
08 main:
09 $(CC) $(CCFLAGS) main.c > NULL
10 clean:
11 @rm -rf main.obj
12 @rm -rf main.exe
13 msg:
14 # @ : 명령어가 보이지 않는다. echo: 화면에 출력명령
15 @echo request
16 # 다지우고 다시 컴파일
17 rebuild: clean all
01, 04, 05, 07, 14, 16 : # 로 시작하는 줄은 모두 주석처리된다.
02, 03 : 이와 같이 대입연산자가 가운데 있으면 좌측은 변수명이 되고 우측은 변수의 값이 된다.
06, 08, 10, 13, 17 : ":" 왼편에 오는 부분은 라벨(label)이라하여 make 명령어 뒤에 따라오는
부분의 명령어를 정의해놓은 부분이다.
그리고 좌측이 실행되려면 콜론(:)의 우측이(혹은 Enter로 구분된 다음 label까지) 반드시 있어야 하므로, 좌측이 우측에 종속성(dependency)을 가진다고 한다.
06라인의 all:이라고 정의해놓은 부분은 그냥 make만 입력했을 때 자동으로 수행되는 부분이다.
make clean이라고 실행하면 빈 줄로 나눠진 11, 12라인이 수행되는 것이다.
09 : $()의 괄호안에 오는 부분은 02, 03라인에서 정의한 변수의 값이 대입된다는 의미로,
$(CC)는 cl로 대입되고 $(CCFLAGS)는 -Wall로 대체되게 된다.
곧 09행은 cl -Wall main.c > NULL 이라는 행으로 대체된다.
11, 12, 15 : @로 시작되는 라인은 해당 라벨(label)의 명령어가 수행되었을 때 화면에 프린트 되는 명령어를
숨겨준다.