
임시 파일을 만들고 makefile을 사용하여 일부 텍스트를 파이프하고 싶습니다.
Bash에서는 다음과 같이 임시 파일을 만들고 텍스트를 파이프할 수 있습니다.
temp_file=$(mktemp)
echo "text goes into file" > ${temp_file}
cat ${temp_file}
rm ${temp_file}
실행 시 출력(예상대로):
text goes into file
makefile에서 동일한 코드를 사용하면 다음과 같은 결과가 나타납니다.
파일 생성:
test:
temp_file=$(mktemp)
echo "text goes into file" > ${temp_file}
cat ${temp_file}
rm ${temp_file}
$make test
echo "text goes into file" > /bin/sh: -c: line 1: syntax error near
unexpected token `newline' /bin/sh: -c: line 1: `echo "text goes into
file" > ' make: *** [makefile:18: test] Error 2
내가 여기서 뭘 잘못하고 있는지 아시나요? 아니면 특별한 메이크파일 구문 규칙이 누락된 걸까요?
답변1
문제는 레시피의 각 라인이 별도의 쉘 호출에서 실행되므로 한 라인에 설정된 쉘 변수가 후속 라인에서 표시되지 않는다는 것입니다(참조:makefile의 현재 디렉터리가 변경되지 않는 이유는 무엇입니까?). 가장 중요한 것은 $
쉘이 볼 수 있도록 기호를 두 배로 늘려야 한다는 것입니다 $
.
그러나 여기서는 쉘 변수 대신 Make 변수를 사용할 수 있습니다.
TEMP_FILE := $(shell mktemp)
test:
echo "text goes into file" > $(TEMP_FILE)
cat $(TEMP_FILE)
rm $(TEMP_FILE)