[Makefile] PHONY
·
🏃‍♀️ Activities/42 Cursus
PHONY.PHONY는 가짜 타겟(phony target) 을 선언하는 것이다. 일반적인 파일 이름과 겹칠 수 있는 타겟을 구분하기 위해 사용된다..PHONY: clean fclean re allMakefile에서 타겟 이름이 실제 파일 이름과 충돌할 수 있기 때문에 PHONY가 필요하다.예를 들어, clean이라는 파일이 존재하면 make clean을 실행할 때 그 파일을 타겟으로 착각해서 아무 작업도 수행하지 않을 수 있다. .PHONY가 없을 때clean: rm -f *.omake clean을 실행하면 clean이라는 파일이 없으면 정상적으로 실행된다.하지만 clean이라는 파일이 디렉토리에 존재하면, make는 이 타겟이 최신 상태라고 판단해서 명령어를 건너뛰어버린다. .PHONY: clea..
[Makefile] SRC / OBJ / NAME
·
🏃‍♀️ Activities/42 Cursus
SRC (Source Files)SRC는 소스 파일 목록을 담고 있는 변수이다.보통 .c 확장자를 가진 모든 소스 파일을 나열한다.SRC = ft_putchar.c ft_swap.c ft_putstr.c ft_strlen.c ft_strcmp.c이렇게 하면 나중에 컴파일할 때 소스 파일 목록을 반복적으로 입력하지 않아도 된다. OBJ (Object Files)OBJ는 오브젝트 파일 목록을 담고 있는 변수이다.소스 파일을 컴파일하면 .c가 .o로 변환된다.OBJ = $(SRC:.c=.o)여기서 $(SRC:.c=.o)는 ft_putchar.c → ft_putchar.o처럼 .c 확장자를 .o로 바꾼 목록을 생성한다. NAME (Target Name)NAME은 최종적으로 생성할 파일 이름을 담고 있는 변수야...
[Makefile] %
·
🏃‍♀️ Activities/42 Cursus
📌 %%는 Makefile의 패턴 매칭(Pattern Matching)에서 사용되는 와일드카드(wildcard) 역할이다.어떤 문자열과도 대응할 수 있는 'placeholder'같은 것이다. 기본 역할 (패턴 규칙)%는 하나의 문자열 패턴을 의미한다.%.o: %.c는 .c파일을 .o파일로 변환하는 일반 규칙을 만들 때 사용한다. 예시%.o: %.c $(CC) $(CFLAGS) -c $%.o: 모든 .o 파일%.c: 모든 .c 파일과 대응$: 현재 컴파일 중인 .c 파일 이름 (%.c)$@: 현재 생성 중인 .o 파일 이름** (%.o) 패턴 변환 $(VAR:%.c=%.o)%는 변수 값에서 특정 패턴을 변환할 때도 사용한다. 예시SRC = srcs/ft_putchar.c srcs/ft_swap.cO..
[Makefile] make & make all 차이
·
🏃‍♀️ Activities/42 Cursus
📌 make & make allmake와 make all은 대부분의 경우 동일하게 동작하지만, 약간의 의미 차이와 사용 목적이 있다. ✅ make는 기본 타겟(Default Target)을 실행Makefile에서 가장 첫 번째로 정의된 타겟이 default이다.예를 들어,이게 Makefile의 제일 위에 있다면, 터미널에서 make를 입력하면 자동으로 make all을 실행하는 것과 같다.all: libft.a ✅ make all은 이름이 "all"인 타겟을 실행make all은 명시적으로 all: 타겟을 호출하는 것이다.그래서 Makefile 안에 all: $(NAME) 코드가 있어야 한다.예시all: $(NAME)$(NAME): $(OBJ) ar rcs $(NAME) $(OBJ) 이 구조에서 ..
[Makefile] Makefile 구조와 rule
·
🏃‍♀️ Activities/42 Cursus
📌 Makefile 구조target: dependencies commandstarget: 만들고자 하는 파일 이름 (보통 실행 파일 또는 라이브러리 이름)dependencies: 해당 타겟을 생성하기 위해 필요한 파일들 (소스 파일, 헤더 파일 등)commands: dependencies를 이용해 target을 만드는 명령어명령어는 반드시 탭(tab)으로 시작해야 한다. 아니면 Makefile: missing separator 오류가 발생한다. 📌 arar(archiver)은 여러 오브젝트 파일(.o)을 묶어서 하나의 정적 라이브러리(.a) 파일로 만들어주는 도구이다..a파일은 정적 라이브러리로, 실행 파일을 컴파일할 때 코드가 프로그램에 직접 포함된다.정적 라이브러리는 링킹 시점에 실행 파일에..