다수의 소스 파일로 구성된 큰프로그램중 어떤파일이 변경되어 재 컴파일이 필요한지
판단해서 프로그램 재구성작업을 효율적을 수행하는 역할을 한다.
make는 수정된것을 안다 수정시간등으로 그래서 수정된 파일만 컴파일을 해준다.
예를 들어서  a.0의 수정시간보다 a.c 의 수정시간이 최신이면 다시 컴파일을 해준다.

make파일의 기본적인 형태
먼저 타겟을 적는다 예를 들어서 컴파일을 해서 Test라는 실행 파일을만들고 싶으면
Test 가 make에들어간다.
예) make test a.c b.c c.c
 여기 한줄아래 대상파일을 실행하기 위한 명령을 아래적는다
 위에 공백은 탭키로 해야지만 위에 줄이 명령이라고 인식한다.
예)
test:: test.c
 gcc test.c -o test
clean:                                            => make clean이라는 명령을 주었을때 이것이 실행이된다. 쉽게 말해서 라벨을 찾아서  실행명령을 수행한다.
 rm test.o
======================
의존성
대상과 대상을 생성하는데 필요한 소스 파일의 관계

사용자 삽입 이미지

사용자 삽입 이미지

test::test test1.o test2.o test3.o
test1.o:test1.c a.h
test2.o:test2.c.a.h b.h
test3.o:test3.c b.h c.h
보통 이런식으로 해줘야 다시 재빌드 하는 작업이 줄어든다.
test 1,2,3은 아래 파일에 의해서 만들어지고 test는 test1.o test2.o test3.o 에 의해서 만들어진다.
test: test1.o test2.o test3.o
 gcc -o test test1.o test2.o test3.o
test1.o: test1.c a.h
 gcc-c test1.c
test2.o: test2.c a.h b.h
 gcc -c test2.c
test3.o: test3.c b.h c.h
 gcc -c test3.c
-----------------------------------------------------
make
치면 지가알아서 컴파일
메이크파일은 Makefile이렇게 첫문자를 항상대문자로 만들어야한다.
긴명령을 쓸려면 깔끔하게 보이게 \을 사용해도된다.
test: test1.o \
 test2.o\
 test3.o\
 test4.o\
이런식으로 써도 된다.
------------------------------------------------------------------------------------------------
셸에서는 ;을 사용해서 깔끔하게 보이게 쓸수도 있다.
-------------------------------------------
매크로정의
M_NAME = value
사용할땐 $(M_NAME)

매크로 치환
OBJF=test1.o test2.o test3.o
SRCS=$(OBJF:.o=. c)
-----------------------------------------------------------------------------------------------------------------------
암시적인 규칙을이용한다.
01 OBJF = test1.o test2.o test3.o
02 test: $(OBJF)
03 ??gcc -o $@ $(OBJF)
04 clean:
05 ??rm $(OBJF)

      리눅스  |  2007. 9. 11. 18:05



sokoban's Blog is powered by Daum & Tattertools