gnuMake, 환경 변수를 재정의하는 방법

gnuMake, 환경 변수를 재정의하는 방법

현재 나는 다음과 같은 정의로 Makefile을 사용하고 있습니다.

MYLIB=/.../mylib-1.2.34

문제는 이것이 개발자마다 다르며 체크아웃할 때마다 파일을 다시 편집해야 한다는 것이 고통스럽다는 것입니다.

그래서 특정 환경 변수를 내보낸 다음 실행해 보았습니다.

MYLIBX:=$(MYLIB_ENV)
MYLIBX?=MYLIB

문제는 MYLIB_ENV가 정의되지 않은 경우에도 여전히 빈 MYLIBX를 생성하므로 ?=가 작동하지 않는다는 것입니다. 이 매우 기본적인 작업을 수행하는 깔끔한 방법이 있습니까?

나는 빌드하고 서로 호출하는 등 다양한 작업을 수행하는 수년에 걸쳐 개발한 "풍부한" make 파일 세트를 사용하고 있으므로 깊은 변경이 불가능합니다.

해결책

더블 셔플. MYLIB가 정의되었습니다.

MYLIB_ENV?=MYLIB
MYLIB:=MYLIB_ENV

답변1

문제는

MYLIB:=$(MYLIB_ENV)
MYLIB?=/.../mylib-1.2.34

항상 MYLIB첫 번째 줄에 정의되므로 두 번째 줄은 적용되지 않습니다.

이 경우 일반적인 접근 방식은 다음과 같습니다.

MYLIB?=/.../mylib-1.2.34

이를 통해 개별 개발자는 make명령줄의 셸에서 자신의 값을 지정할 수 있습니다.

make MYLIB=...

또는 실행하기 전에 환경에서make

export MYLIB=...
make

(그래서 한 번만 설정하면 됩니다.예를 들어쉘 시작 스크립트에 넣은 다음 잊어버리세요).

그냥 달리면

make

값을 지정하지 않으면 MYLIB기본값이 사용됩니다./.../mylib-1.2.34

또 다른 옵션은Makefile이 저장되는 위치 결정, 그러나 모든 경우에 작동하지는 않습니다(특히 Makefile 경로에 공백이 포함된 경우).

답변2

정확히 무엇을 원하는지 명확하지 않습니다. 그러나 Makefile을 편집할 필요 없이 Make 변수 MYLIB의 설정을 Makefile에 지정된 것과 다른 것으로 재정의해야 하는 경우 매우 간단합니다. 호출에서 다음을 사용하여 명령줄을 make지정합니다 . MYLIB당신이 선택한 값, 예:

make -f yourmakefile yourtarget MYLIB="I_need_my_personal_value"

또 다른 방법:

MYLIB := ORIGINAL_VALUE

ifneq '$(MYLIB_ENV)' ''
MYLIB := $(MYLIB_ENV)
endif

관련 정보