셸에서 사용할 때 이름을 인용해야 하는 파일이 여러 개 있다고 가정해 보겠습니다.
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는 어쨌든 이를 실제로 처리할 수 없습니다.