요즘 한창 리눅스에서 소스 컴파일링을 하느라 Makefile을 쓸일이 많아졌습니다.
참고 사이트도 뒤적거리면서 RTA 세미나 시간에 받은 소스도 뒤적거리면서 대충 감을 잡긴 하였는데... 한번 올려봅니다.
main.c 와 tftlec_driver.c 라는 파일을 컴파일링 하여 응용 프로그램을 짠다고 가정합니다.
tftlcd 라는 최종 프로그램을 만들어야 합니다.
그러기 위해서 일단 main.c 를 컴파일링 하여 main.o 파일을 만들어 냅니다.
그리고 tftlcd_driver.c를 컴파일링 하여 tftlcd_driver.o 파일을 만듭니다.
그뒤 두개의 파일을 합쳐서 tftlcd라는 최종 프로그램을 컴파일하게 되는것입니다.
그렇다면 콘솔에서 아래처럼 치겠죠...
Code Type : DOS
$arm-linux-gcc -I. -c main.c
$arm-linux-gcc -I. -c tftlcd_driver.c
$arm-linux-gcc -o tftlcd main.o tftlcd_driver.o
$rm -f main.o tftlcd_driver.o *.bak
이걸 Makefile로 만들면 아래와 같습니다.
Code Type : DOS
CC = arm-linux-gcc
INCLUDE = .
tftlcd : main.o tftlcd_driver.o
$(CC) -o tftlcd main.o tftlcd_driver.o
main.o : main.c
$(CC) -I$(INCLUDE) -c main.c
tftlcd_driver.o : tftlcd_driver.c
$(CC) -I$(INCLUDE) -c tftlcd_driver.c
clean :
rm -f main.o tftlcd_driver.o *.bak
Makefile을 에디터로 만든다음에 써주시면 됩니다.
위의 것을 일반적인 명령으로 쓰자면 다음과 같습니다. ( 제가 이해하기론;;; )
CC 는 compiler의 이름입니다. 저의경우엔 arm-linux-gcc를 사용합니다.
INCLUDE 는 디렉토리 입니다. 나중에 arm-linux-gcc -I솰라솰라 하기 위해서 사용합니다...
만... 여기선 별로;;; 큰 의미는 없습니다.
그뒤 tftlcd 를 한뒤 : ( 콜론 ) 으로 구분해주고 .o 파일들을 정의 해줍니다.
그뒤 $(CC)로 매크로 정의한뒤 뒷 명령어들을 적어주면 좋겠죠.
나머지도 같은 방식입니다.
그리고 clean은 '$make clean' 할때 쓰게 되는데 컴파일링후의 자잘한 쓰레기 파일들을 삭제할때 사용됩니다.
Code Type : DOS
CC = arm-linux-gcc
INCLUDE = .
MAIN_OBJ = main.o
MAIN_SRC = main.c
DRV_OBJ = tftlcd_driver.o
DRV_SRC = tftlcd_driver.c
MAKE_TARGET = tftlcd
$(MAKE_TARGET) : $(MAIN_OBJ) $(DRV_OBJ)
$(CC) -o $(MAKE_TARGET) $(MAIN_OBJ) $(DRV_OBJ)
$(MAIN_OBJ) : $(MAIN_SRC)
$(CC) -I$(INCLUDE) -c $(MAIN_SRC)
$(DRV_OBJ) : $(DRV_SRC)
$(CC) -I$(INCLUDE) -c $(DRV_SRC)
clean :
rm -f $(MAIN_OBJ) $(DRV_OBJ) *.bak
일단은 전부 매크로로 바꾼 모습입니다. 대충 감이 잡히시나요?
일단 제가 이해한것은 여기까지입니다. 덜덜덜;;
갑자기 민망함이 급속도로 밀려오는 이 느낌은;;;