반응형
ENV 변수 또는 기본값을 사용하여 Makefile 변수 정의
저는 간단한 일을 하려고 합니다.
TMPDIR ?= /tmp
test:
@echo $(TMPDIR)
실행 시 동작합니다.
$ make test
/tmp
다음을 실행해도 동작합니다.
$ make test -e TMPDIR=~/tmp
/home/user/tmp
다음 작업에도 사용할 수 있도록 하려면 어떻게 해야 합니까?
$ TMPDIR=~/tmp make test
/home/user/tmp
위의 코멘트를 팔로업하기 위해 예를 제시하겠습니다.
T ?= foo
all:
: '$(T)'
Make file을 다양한 방법으로 실행하면 예상대로 동작합니다.foo
내가 설정하지 않는 한해서T
명령줄 또는 환경 중 하나)에서 다음을 수행합니다.
$ make
: 'foo'
$ make T=bar
: 'bar'
$ T=bar make
: 'bar'
명령줄에 지정된 변수는 makefile에 할당된 값을 덮어씁니다.
TMPDIR := "/tmp"
test:
@echo $(TMPDIR)
그 후:
make TMPDIR=whatever
whatever
일반적으로 makefile은 환경변수에 의존하면 재현 불가능한 빌드로 이어질 수 있기 때문에 잘못된 관행으로 간주됩니다.이것이 전달 변수가 오버라이드되는 이유입니다.make
명령줄을 명시적으로 사용하는 것이 좋습니다.
간단한 해결책은 다음과 같습니다.
SHELL := env TMPDIR=$(TMPDIR) $(SHELL)
TMPDIR ?= "/tmp"
all:
@echo $(TMPDIR)
두 시나리오 모두에서 동작합니다.TMPDIR=new/path make
그리고.make TMPDIR=new/path
.
할 수 있는 일 중 하나는 다음과 같습니다.
TMPDIR := "/tmp"
ifdef $$TMPDIR
TMPDIR := $$TMPDIR
endif
test:
echo $(TMPDIR)
언급URL : https://stackoverflow.com/questions/24263291/define-a-makefile-variable-using-a-env-variable-or-a-default-value
반응형
'code' 카테고리의 다른 글
WPF/MVVM Light Toolkit을 사용한 창 닫기 이벤트 처리 (0) | 2023.04.23 |
---|---|
Excel 파일의 올바른 콘텐츠 유형은 무엇입니까? (0) | 2023.04.23 |
세로 구분 기호를 추가하는 방법 (0) | 2023.04.23 |
msdeploy를 통한 Azure Web App 전개 오류 - ERROR_INSUFFICE_A CCESS_TO_SITE_FOLDER (0) | 2023.04.23 |
UIMage : 애스펙트 핏과 센터 표시 (0) | 2023.04.23 |