1)make
-유닉스계열 OS의 프로그램 빌드 자동화 도구
-파일 간 종속관계를 파악하여 Makefile(기술파일)에 적힌 내용을 컴파일러가 순차적으로 실행되게 함
1-1) make 장점
-반복 작업 자동화로 시간 절약
-프로그램 종속 구조 파악으로 관리 용이
2)Makefile
-make 구조로 기술된 파일
-make (명령어?) 를 사용하여 지정된 순서대로 빌드 과정을 수행하는 스크립트 파일
-수정한 파일만 컴파일하여 전체 파일을 링크하는 작업을 도와 작업시간단축
3)makefile 구조
<target> : <dependency>
(tab)<command 1>
(tab)<command 2>
-target : 빌드 대상 이름, 결과 파일명
-dependency : 빌드 대상의 의존 파일 목록, target 생성을 위한 필요 파일들
-command : 실행 명령어
// 명령어의 시작은 반드시 탭으로 시작
// Dependency 없는 target도 사용 가능
4) all
- 명령창에서 $make 입력 시 기본적으로 $make all 이 실행됨
all : test1 test2 test3
test1:<생략>
test2:<생략>
test3:<생략>
--> make all //test1 test2 test3 모두 실행
--> make test2 //test2만 실행
5) make 내장 변수
-CC:컴파일러
-CFLAGS:컴파일옵션
-OBJS: 중간 산물 Object 파일 목록
-TARGET: 빌드 대상(실행 파일) 이름
-LDFLAGS: 링커 옵션
-LDLIBS: 링크 라이브러리
변수 사용을 위해
$(CC)
${CC}
위와 같은 표기로 입력된 변수를 사용
6) 자동 변수(Automatic variables)
$@ : 현재 Target 이름, 출력 파일 콜론의 왼쪽에 오는 패턴을 치환
$^ : 현재 Target이 의존하는 대상들의 전체 목록(종속항목 리스트)
$? : 현재 Target이 의존하는 대상들 중 변경된 것들의 목록
$< : 입력 파일, 콜론의 오른쪽에 오는 패턴을 치환, name of current dependency
$* : 입력 파일에서 꼬리말(.c, .s 등)을 떼넨 파일명, name of current dependency without extension
7) 매크로
Makefile은 빌드 뿐아니라 매크로를 지정하여 사용 가능
7-1)clean build : $make clean 명령어 사용으로 오브젝트 파일들을 한번에 삭제하는 매크로로 정의함
clean :
(tab)rm -f *.o
(tab)rm -f $(TARGET)
7-2)fclean build : $make fclean 명령어로 실행파일 및 오브젝트 파일을 한번에 삭제하는 매크로로 정의함
8) .PHONY(포니 타켓)
- 동일한 이름의 파일 존재 시 충돌을 피하기 위해 사용
- makefile이 위치한 작업 디렉토리 내에 target과 같은 이름의 파일이 존재하면 make는 이미 빌드가 끝난 타켓이라 판단해 해당 명령어를 수행하지 않는다. 그러므로 .PHONY를 사용해 makefile에 명시된 target이 명령를 수행한다.
9) @의 의미
all:
@echo "with @..... make will not print out the command that it executes."
커맨드창에 실행되는 명령이 출력안됨
all:
echo "without @....."
커맨드창에 실행되는 명령이 출력됨
10)기타
${SRC:.c=.o} //SRC에서 .c파일을 .o파일로 변환
$make //터미널에서 make만 입력하면 makefile에 입력된 가장 첫번째 규칙을 찾아 실행
NAME = exe.a
CFLAGS = -Wall -Wextra -Werror
SRC = = ft_memcmp.c ft_strlen.c ft_strlcpy.c\
ft_atoi.c ft_isalpha.c ft_isdigit.c\
OBJ = $(SRC:.c=.o)
.PHONY : all clean fclean re
all : $(NAME)
$(NAME) : $(OBJ)
@echo "Compile $(NAME)...."
@gcc $(CFLAGS) -c $(SRC)
@ar rc $(NAME) $(OBJ)
@ranlib $(NAME)
clean :
@echo "Remove object file..."
@rm -rf $(OBJ)
fclean : clean
@echo "Remove $(Name)..."
@rm -rf $(NAME)
re : fclean all
'Shell > 1' 카테고리의 다른 글
/etc/sudoers | visudo (0) | 2021.09.13 |
---|---|
UFW(Uncomplicated Firewal) 설정 (0) | 2021.09.06 |
vim .vimrc환경설정 (0) | 2021.06.19 |
파일 디스크립터(File Descriptor) / 입출력 리다이렉션 (0) | 2021.05.24 |
touch (0) | 2020.10.15 |