[variables] Makefile 변수에서 항목을 제거 하시겠습니까?

다른 여러 메이크 파일을 포함하는 메이크 파일이 있는데, 모두 다음과 같은 변수에 추가됩니다.

VAR := Something SomethingElse
VAR += SomeOtherThing

(...)

이제 변수 SomethingElse에서 제거 하고 싶습니다 VAR. (...)이 작업을 수행하려면 대신 무엇을 입력해야 합니까?

나는 GNU Make를 사용하고 있으며 GNU Make 특정 솔루션이 좋습니다.



답변

GNU Make를 사용하는 경우 filter-out텍스트 기능을 사용할 수 있습니다 .

OTHERVAR := $(filter-out SomethingElse,$(VAR))


답변

위의 정답 위에 :

VAR = bla1 bla2 bla3 bla4 bla5

TMPVAR := $(VAR)
VAR = $(filter-out bla3, $(TMPVAR))

all:
    @echo "VAR is: $(VAR)"

출력 :
VAR : bla1 bla2 bla4 bla5

이것은 필터 아웃이 실행될 때 모든 “재 귀성”을 깨뜨리지 만 귀하의 경우에는 중요하지 않을 수 있습니다.


답변

저도 비슷한 상황이기 때문에 새로운 답변을 추가하고 싶습니다. 제 경우에는 변수 문자열에도 쉼표가 있었고 더 나아가 쉼표와 마지막 단어를 제거하고 싶었습니다.

VAR = "bla1, bla2"

이 경우 필터 아웃이 작동하지 않습니다 (이전 답변에서도 따옴표가없는 경우)

내 해결책은 다음을 사용하는 것입니다 subst.

VAR = "bla1, bla2"

TTT = , bla2
TMPVAR := $(VAR)
SUBST = $(subst $(TTT),, $(TMPVAR))
FILT = $(filter-out $(TTT), $(TMPVAR))

subst:
    @echo "subst : $(SUBST)"

filter:
    @echo "filter-out : $(FILT)"


답변