본문 바로가기
프로그래밍/툴

Makefile

by 써드아이 2013. 11. 27.

.c.o:

gcc -c $<




%.o:%.c

gcc -c -o $@ $<




$< : 입력화일

$@ : 출력화일

$* : 입력 화일에서 확장자를 떼낸 화일명

$^ : 



DEBUG_OBJS = main_dbg.o edit_dbg.o



%_dbg.o:%c

gcc -c -g -o $@ $<


target_dbg: $(DEBUG_OBJS)

gcc -o $@ $(DEBUG_OBJS)





myprog: main.o foo.o

gcc -o $@ main.o foo.o



===>



OBJS = main.o foo.o


myprog:$(OBJS)

gcc -o $@ $(OBJS)




http://wiki.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make-7.html



.SUFFIXES : .c .o


CC = gcc


INC_DIRS = -I/../.. <- include 되는 헤더 파일의 패스를 추가한다. (대문자 I)

LIBS = -lname <- 링크할 때 필요한 라이브러리를 추가한다. (소문자 L)

LIB_DIRS = -L/../.. <- 라이브러리 패스 (대문자 L)


CFLAGS = -Wall -g $(INCS) <- 컴파일에 필요한 각종 옵션을 추가한다.

LDFLAGS =


OBJS = <- 목적 파일의 이름을 적는다.

SRCS = <- 소스 파일의 이름을 적는다.


SRCS = $(foreach dir, ., $(wildcard $(dir)/*.c))

SRCS := $(notdir $(SRCS))

OBJS = $(SRCS:.c=.o)


TARGET = <- 링크 후에 생성될 실행 파일의 이름을 적는다.


all : $(TARGET)


$(TARGET) : $(OBJS)

                $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)

                or

                $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)


.c.o:
$(CC) $(CFLAGS) -c $< -c $@

dep :

                gccmakedep $(INC) $(SRCS)


clean :

                rm -rf $(OBJS) $(TARGET) core


new : 

                $(MAKE) clean 

                $(MAKE) 




http://www.korone.net/bbs/board.php?bo_table=etc_misc&wr_id=164&sca=Linux