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