makefile에서 mktemp 사용

makefile에서 mktemp 사용

임시 파일을 만들고 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)

관련 정보