Makefile
에서 ?=
연산자와 =
연산자는 다르게 동작합니다.
=
연산자
단순 할당 연산자로, 변수를 정의하고 값을 할당합니다. 예를 들어:
SIM = icarus
이 코드는 항상 SIM
변수를 icarus
로 설정합니다.
?=
연산자
조건부 할당 연산자로, 변수가 이미 정의되지 않았을 때만 값을 할당합니다. 예를 들어:
SIM ?= icarus
이 코드는 SIM
변수가 아직 정의되지 않았을 때에만 icarus
값을 할당합니다. 만약 SIM
변수가 이미 다른 값으로 설정되어 있다면, ?=
연산자는 아무런 동작도 하지 않습니다.
예시
다음 예시를 통해 =
와 ?=
의 차이를 명확히 이해할 수 있습니다:
# 예시 Makefile
# SIM이 이미 정의되어 있다면, ?=는 아무 동작도 하지 않습니다.
SIM ?= icarus
all:
@echo $(SIM)
이 Makefile
을 실행하면 다음과 같은 동작이 일어납니다:
make
를 실행할 때 환경 변수로SIM
이 설정되지 않았다면,SIM
은icarus
로 설정됩니다.make
를 실행할 때 환경 변수로SIM
이 설정되어 있다면, 그 값이 사용됩니다.
make
출력:
icarus
make SIM=verilator
출력:
verilator
요약
=
: 항상 변수를 설정합니다.?=
: 변수가 아직 설정되지 않았을 때만 변수를 설정합니다.
따라서, SIM ?= icarus
는 SIM
변수가 이미 설정되지 않은 경우에만 icarus
로 설정되도록 합니다. 이는 기본값을 설정할 때 유용합니다.
'IT > Software' 카테고리의 다른 글
Makefile 내에 .PHONY 의미 (0) | 2024.11.22 |
---|---|
Marp for VS Code - 커스텀 테마 경로 설정 (0) | 2024.06.18 |
엑셀에서 특정 값인 셀 배경 자동으로 바꾸기 (0) | 2024.05.14 |
VI 팁 - 특정 문자열 포함 라인 전체 없애기 (0) | 2024.04.02 |
VI 기능 - 문자열에서 바로 파일 열기 - gf (0) | 2024.03.29 |