컴퓨터 공부/유닉스 시스템 프로그래밍

[4월 23일 1교시] GNU make

려리군 2009. 4. 23. 14:40

진도표 : 600~618


의존성

foo 파일이 수정될 때마다 blah는 되어야 함.

foo는 blah에 의존성이 있음.

시간 값으로 의존성을 파악할 수 있음.


makefile

makefile에 의존성에 대해 정의하여야 함.

makefile이 없으면 Makefile을 찾음.

makefile -f [임의의파일이름]

makefile에 의해 만들어진 파일(???:)의 시간보다 의존성이 있는 파일(?.c)의 시간이 더 새 것일 경우...

make프로그램이 판단하여 의존성에 어긋나지 않도록 함.


makefile작성

main부분을 완성하기 위해 위에서부터 아래로 실행함.

실행할 명령어 indent는 반드시 tab키를 사용하여야 함.

예시)

main: main.o sum.o

        gcc -o main main.o

sum.o: sum.c

        gcc -c sum.c

main.o: main.c

        gcc -c main.c


매크로 

 - 어떤 파일과 대응되는 이름으로 매크로를 만든다.

 - $< : 현재 처리 중인 파일명

 - $@ : target 파일명

 - $* : 현재 처리 중인 파일명에서 확장자 제외

 - make -p

    make에서 미리 세팅되어 있는 모든 값을 확인(매크로, 환경변수)

예시)

OBJS = sum.o main.o

all: main

sum.o: sum.c

        gcc -c sum.c

main.o: main.c

        gcc -c main.c

main: $(OBJS)

        gcc -o $(OBJS)


Suffix Rule

make할 때 정해진 내부적인 규칙

다른 접미사이지만 같은 이름의 파일로부터 접미사로 끝나는 파일을 생성하는 규칙.

예시)

OBJS = sum.o main.o

all: main

.c.o:

        gcc -c $<

main: $(OBJS)

        gcc -o $(OBJS)


예시2)

%.o: %.c

        gcc -c $<