Search
Duplicate

makefile

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
Scrap
태그
libft
9 more properties
makefile문법은
타겟 : 재료 명령
JavaScript
복사
과 같은 형태로 이루어진다. 이때 타겟은 리눅스에서 파일이다. (clean, $(NAME) 등등 )
보통 커널에서 실행하기도 하는 gcc main.c 명령어는 main.c를 컴파일해서 a.out(리눅스에서 default 실행파일 값.. 윈도우라면 .exe)실행파일을 만드는 명령어이다.
우리는 보통 gcc에 옵션 -Wall -Wextra -Werror
까지 실행하는데,
a.out: main.c gcc -Wall -Wextra -Werror main.c
JavaScript
복사
라고 쓰면 될 것이다. 근데 보통 makefile을 하는 경우는 컴파일하고자 하는 c파일들이 너무 많고 한번 변경 시 쉽게 빌드하는 것 (전체가 아니라 바뀐 부분만 다시 빌드할 수 있는 것: 증분이라고 한다.)이 목적이기 때문에, ‘하나만 바꿔도 나머지가 다 바뀌는 기적’을 원한다. (변수 설정- 명령어를 다 고치지지 않아도 된다: 변수에 대입되는 값만 바꾸면 파일, 종속파일, 명령어에 있는 건 변수이기 때문에 수정이 자동으로 됨 )
이걸 가능하게 할 수 있는 게 변수 설정이다.
CC = gcc CFLAG = -Wall -Wextra -Werror
JavaScript
복사
라고 미리 정해두고, 나중에 이 변수들로 명령을 구성하는 것이다.
이때 내부 매크로 사용도 가능하다.
1.
내부 매크로 사용
$@ : 현재 타겟의 이름
$^ : 현재 타겟의 종속 항목 리스트
$* : 확장자가 없는 현재의 목표 파일(Target)
$< : 종속 항목 중 첫번째 파일
<.PHONY의 기능>
make를 실행할 때 안에 들어있는 clean 과 같은 명령어가 실행되면 어떻게 되겠는가?(일단 clean파일이 존재하지 않는다는 전제하에: 파일이 이미 존재한다면 만들지 않음) 원하고자 하는 파일을 만들고 나서도 바로 삭제명령이 실행되어서 얻지 못할 것이다. 이런 상황을 막기 위해서
clean, re와 같은 명령어들을 이미 만든 파일이라고 “거짓말”을 쳐서 만들지 않도록 하는게 .PHONY의 기능이다. 단 make와 함께 명령어를 사용하면 다시 그 파일을 만들라는 명령이 되기 때문에. make와 함께 사용하는 방식으로 해당 파일을 만들 수 있다.