2010년 2월 19일 금요일

GNU make & autotools

(1) make
  • make
    • 파일 관리 유틸리티
    • 파일 간의 종속 관계를 파악하여 기술
    • 파일(makefile)에 기술된 대로 컴파일 혹은 쉘 명령을 순차적으로 수행.
  • make 장점
    • 컴파일 시간 절약
    • 프로그램 종속 구조를 빠르게 파악 가능
    • 프로그램 관리 용이
    • 단순 반복 작업과 재 작성을 최소화 ==> 개발자의 시간 절약
  • make 기본동작
all : diary
diary : memo.o calendar.o main.o
gcc -W -Wall -o diary memo.o calendar.o main.o
memo.o : memo.c
gcc -W -Wall -o memo.o memo.c
calendar.o : calendar.c
gcc -W -Wall -o calendar.o calendar.c
main.o : main.c
gcc -W -Wall -o main.o main.c


(2) 기술파일 작성방법
  • 기술파일 작성
CC = gcc <== 매크로 정의
target1 : dependency1 dependency2
(tab) command1 # 주석처리
command2 \ <== 개행 같은 라인으로 인식
command3
  • 매크로 사용
    • 매크로 : 사용자 정의 변수에 특정한 문자열을 정의
    • 일관된 기술 파일 작성 가능 => 이식성과 융통성 높은 기술 파일 작성 가능
CC = arm-linux-gcc # 매크로 정의
...
$(CC) ... # 매크로 사용( or ${CC} )

NAME1 = stringA # 재귀적 확장 매크로
NAME2 := stringB # 단순 확장 매크로
NAME3 += stringC
NAME4 ?= stringD

A = $(B) BB # A = D CC BB
B = $(C) CC # B = D CC
C = D

a := $(b) bb # a = bb
b := $(c) cc # b = cc
c := d # c = d

NAME := string1 # NAME ==> string1 string2
NAME += string2

NAME1 := string1 # NAME1 ==> string1
NAME1 ?= string2
NAME2 ?= string3 # NAME2 ==> string3

CC = gcc
CFLAGS = -W -Wall
TARGET = diary

all : $(TARGET)
$(TARGET) : memo.o calendar.o main.o
$(CC) $(CFLAGS) -o $(TARGET) memo.o calendar.o main.o
...
clean :
rm -f *.o
rm -f $(TARGET)
    • 내부적으로 정의되어 있는 매크로가 있음(ex) CC = cc)
    • 내부적 정의 매크로 확인 :
      • #make -p |grep ^[[:alpha:]]*[[:space:]]*=[[:space:]]
    • 자동 macro
      • $^ : 현재 타겟의 종속 항목 리스트(확장자 규칙에서 사용 불가)
      • $@ : 현재 타겟의 이름
      • $< : 현재 타겟보다 최근에 변경된 종목 항목 리스트
  • 확장자 규칙 사용
    • 확장자 규칙 : 확장자(.c, .o, .S ...)에 따라 정의되어 있는 기술파일 항목
    • 기술 파일을 단순, 명료하게 할 수 있음
    • 내부적으로 정의되어 있는 확장자 규칙( %.o : %.c ... )
    • .SUFFIXES : .o .c ...
    • SRCS = $(wildcard *.c); OBJECT = $(SRCS:.c=.o)
    • OBJECT = $(patsubst %.c, %.o, $(wildcard *.c)) <= 3중에서 1을 2로 바꿔
  • 명령어 사용 규칙
    • cd ./tmp; rm -rf * ==> 문제 있음
    • cd ./tmp && rm -rf * ==> 다른 의미에서, 왼쪽이 참이면 오른쪽 수행
    • 에코기능 끄기 : .SILENT: or @cat file.txt
    • Error와 상관없이 수행 : .IGNORE: or -cat file.txt
    • Shell 변수 사용 : $$(HOME)
  • 재귀적 make 사용
    • 소스가 하위 디렉토리에 존재할 경우, 각 디렉토리를 순회하며 make 수행.
    • tree 명령어로 디렉토리를 tree 구조로 보여줌.
  • 조건부 수행
  • 함수의 사용
(3) Autotools 소개
(4) Autoconf 사용법
(5) Automake 사용법

end

댓글 없음:

댓글 쓰기