본문 바로가기

Thinking/Study

Makefile 예제 설명

728x90

프로젝트에서 사용중인 Makefile 을 예를 들어서 매크로나 의미들을 남기고자 한다.


include ../Makefile.tmpl


CC = gcc

LIBDF = ../library/libdf.a

LDFLAGS = -lpthread


TARGET = watchProcess

OBJS =  process_manager.o


all: $(TARGET)


$(TARGET): $(OBJS)

    $(CC) $(INCLUDE) $(CFLAGS) $(LDFLAGS) $(OBJS) $(LIBDF) \

    -o $@


.c.o:

    $(CC) $(INCLUDE) $(CFLAGS) -c $<


process_manager.o: process_manager.h $(LIBDF)


clean:

    rm -rf *.o core tags *.bak $(TARGET)


1. TARGET 변수는 최종 실행물 이름.

2. OBJS 변수는 코드 오브젝트 파일들 리스트.

ex) OBJS = a1.o a2.o a3.o

3. "왼쪽: 오른쪽" 왼쪽은 "목표", 오른쪽은 "조건". 오른쪽에 해당하는 내용이 변경/수정되었을 경우, 왼쪽 "목표" 의 "명령" 항목을 실행

위의 예에서 

$(TARGET): $(OBJS)

$CC ~

=> $(OBJS) 즉, process_manager.o 변경사항이 있을때 "$(CC) ~ -o $@ "실행. "$@" 매크로 의미는 "목표" 에 해당하는 이름. 여기서는 $(TARGET) 이 되고, watchProcess 와 같음.

4. ".c.o" : .c 파일을 .o 파일로 컴파일할때 전체 적용시키기 위한 확장자 규칙.

위의 예 $(CFLAGS) -c $<  에서 "$<" 는 조건의 첫번째 파일이라는 의미하는 매크로인데, "조건" 이 없지만 전체적용이라서 해당 .c 파일(여기서는 process_manager.c) 하나를 가리킨다. 

변경되어서 컴파일할때는 다음과 같이 바뀐다.

$(CC) $(INCLUDE) $(CFLAGS) -c $<

=> gcc -I../include -g -c process_manager.c


* 참조한 링크

http://forum.falinux.com/zbxe/index.php?document_srl=405822

저장된 PDF:

Makefile 만들기.pdf