- Make 개요
-목적
프로그램의 관리
스크립트 형태의 유틸리티로서 프로그램 개발에 이용
명령어를 이용하여 작업하는 환경에 이용 가능
자체적으로 컴파일이 필요한 파일을 자동으로 판단 / 컴파일 실행
- 필요성
많은 파일들의 컴파일시 매번 동일한 작업을 수행하지 않아도 된다.
문서화를 통해 작업을 잊어 버리는 경우가 없다.
- Make 내부 구조
variable = ...........
target : dependency
--tab----- commmand ....
variable : Make 운용에 필요한 변수 선언
target : 라벨과 같은 역할
dependency : 필요 target들의 의존관계
command : 명령어들의 집합
주의 사항
탭 키를 이용하여 기입
- Make 실행
파일명이 Makefile인 경우
make
파일명이 tempmake인 경우
make –f tempmake
특정 라벨 실행
make label
옵션
h: 도움말
v: 버전
p: 내부적으로 세팅된 값을 화면에 출력
k: 에러 무시
d: 작업한 내용과 정보를 모두 출력
t: 파일 생성 날짜를 현재 시간으로 변경
- 첫 번째 예제
컴파일할 프로그램
common.h
main.c subA.c subB.c subAa.c
Makefile 생성
all :
gcc –o testmain main subA.c subB.c subAa.c
실행
Make
- Makefile 확장
all : main.o subA.o subB.o
cc –o testmain main.o subA.o subB.o
main.o : common.h main.c
gcc -c main.c
subA.o : common.h subA.c
gcc -c subA.c subAa.c
subB.o : common.h subB.c
gcc -c subB.c
clean :
rm main.o subA.o subB.o
rm testmain
- 매크로 사용
OBJS = main.o subA.o subB.o
CFLAGE = -c –O –g
TARGET = testmain
all : $(OBJS)
gcc -o $(TARGET) $(OBJS)
.c.o :
gcc $(CFLAGE) $<
clean :
rm –f $(OBJS)
rm –f $(TARGET)
참고
${ } $( ) $... 모두 같은 표현
내부 매크로 make –p 를 이용하여 확인 가능
$< : TRAGET보다 이후에 변경된 파일 컴파일
$@ : 확장자를 포함한 현재 target 파일 이름
$* : 확장자를 제거한 target 파일 이름
- 매크로 사용
all : main.o subA.o subB.o
cc –o testmain main.o subD.o subB.o
main.o : common.h main.c
gcc -c $*.c
subD.o : common.h subA.c
gcc –o $@ -c subA.c subAa.c
subB.o : common.h subB.c
gcc -c subB.c
clean :
rm main.o subA.o subB.o
rm testmain
Clean을 맨 앞에 두면
make 만 실행 시 clean이 실행된다
- 매크로 치환
문자열 치환
SRCS=main.c subA.c subB.c subAa.c
OBJS= $ (SRCS:.c=.o)
OBJS = main.o subA.o subB.o subAa.o 로 변형된다.
파일들의 의존관계 자동 작성
gccmakedep로 생성
- 매크로 치환
Makefile 변경
OBJS = main.o subA.o subAa.o subB.o
SRCS = $(OBJS:.o=.c)
……
dep :
gccmakedep $(SRCS)
검사
make dep
vi Makefile
- 다중 타겟
목적
여래개의 실행 파일을 만들어야 하는 경우 사용
예제
OBJSA = main.o subA.o
OBJSB = main.o subB.o
all : test1 test2
test1 : $(OBJSA)
gcc –o $@ $(OBJSA)
test2 : $(OBJSB)
gcc –o $@ $(OBJSB)
- Make 순환
목적
여러 디렉토리 내의 Makefile을 실행
형식
형식 1) cd subdir; $(MAKE)
형식 2) $(MAKE) –C subdir
예제
all : Database Test
Database:
@echo database compile
cd db; $(MAKE)
Test :
cd test; $(MAKE)
@은 해당 라인이 화면에
출력되는 것을 방지한다.
Database compile만 출력된다.
@이 없다면
Echo database compile
Database compile
이 출력된다.
다른 명령에도 사용 가능
'EMBEDDED > SYSTEM Proc' 카테고리의 다른 글
[Process] n개의 프로세스 체인을 만드는 프로그램 (0) | 2012.07.13 |
---|---|
[Normal] 프로그램 cpu사용률을 출력하는 exit 핸드러를 가지는 프로그램 (0) | 2012.07.13 |
[Library] Library 만들기 (0) | 2012.07.13 |
[Gcc] 관련 메뉴얼 (0) | 2012.07.13 |
[Normal] 조건부 컨파일 (0) | 2012.07.13 |