Makefile에서 "모든 전제 조건" 변수를 이스케이프하세요.

Makefile에서 "모든 전제 조건" 변수를 이스케이프하세요.

셸에서 사용할 때 이름을 인용해야 하는 파일이 여러 개 있다고 가정해 보겠습니다.

echo A > 'a.$A'
echo B > 'b.$B'

그리고 규칙이 다음 파일에 따라 달라지는 Makefile이 있습니다.

all: a.$$A b.$$B
    cat $+

위 코드는 간단한 이름을 가진 파일에 대해 작동하지만 생성된 예제의 파일에 대해서는 작동합니다.

cat a.$A b.$B
cat: a.: No such file or directory
cat: b.: No such file or directory

$A쉘이 and $B표현식을 빈 문자열로 확장하는 것처럼 보입니다 .

변수를 로 참조하면 cat '$+'확장이 차단되지만 모든 필수 구성 요소는 단일 인수로 전달됩니다.

cat 'a.$A b.$B'
cat: 'a.$A b.$B': No such file or directory

실제로 따르면문서:

모든 전제 조건의 이름 [...] 사이에 공백이 있습니다.

문제는 모든 필수 구성 요소를 참조할 수 있도록 별도의 매개 변수로 가져올 수 있는 방법이 있느냐는 것입니다.

답변1

$+GNU Make를 사용하면 패턴 대체를 사용하여 각 단어를 작은따옴표로 묶을 수 있습니다 .

all: a.$$A b.$$B
        cat $(patsubst %,'%',$+)

이는 공백이 포함된 전제 조건에서는 작동하지 않지만 Make는 어쨌든 이를 실제로 처리할 수 없습니다.

관련 정보