Makefile에서는 변수 값을 바인딩하는 데 따옴표가 필요하지 않습니다.
예를 들어 다음과 같이 허용됩니다.
a := ls -l -a > out.txt
내 질문은 다음과 같습니다.
a := ls -l -a > out
b := .txt
c := $(a)$(b)
변수 $(a) 줄 끝에 공백이 있으면 변수 $(c)는 다음과 같습니다.
ls -l -a > out .txt
그 뒤에 공백이 있습니다 out
!
이로 인해 오류가 발생할 수 있습니다.
모든 makefile 변수 값에서 후행 공백을 전체적으로 무시하는 방법이 있습니까?
답변1
아니요, make가 변수 정의를 구문 분석하는 방식을 변경할 수 있는 방법은 없습니다. 변수가 정의된 지점을 변경할 수 없는 경우 해당 변수가 사용되는 지점을 변경해야 합니다.
GNU make를 사용하고 변수 값 안에 공백이 없어야 한다면 다음을 사용할 수 있습니다.strip
기능.
c := $(strip $(a))$(strip $(b))
답변2
공백은 줄 끝에 있지 않습니다. 공백은 .txt 앞에 있습니다.
이것은 잘 작동합니다:
a:= ls -l -a >out
b:=.txt
c:=$(a)$(b)
all:
@echo ${c}
모든 종류의 텍스트 처리 기능을 사용할 수도 있습니다. 하지만 "공백의 일정량(또는 공백 부족)"에 종속되게 만드는 것은 일반적으로 "나쁜" 것입니다.
답변3
그 후에도 아직 여유가 있습니다 out
. Variable 끝의 공백을 제거하는 것과 같은 문제가 발생했습니다 a
.