Io-Redirection

在 makefile 中使用 mktemp

  • December 9, 2021

我想創建一個臨時文件並使用makefile將一些文本輸入其中。

在 bash 中,我可以創建一個臨時文件並將文本輸入其中,如下所示:

temp_file=$(mktemp)
echo "text goes into file" > ${temp_file}
cat ${temp_file}
rm ${temp_file}

執行時的輸出(按預期):

   text goes into file

在生成文件中使用相同的程式碼時,我得到以下輸出:

生成文件:

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

知道我在這裡做錯了什麼,或者我是否缺少任何特殊的 makefile 語法規則?

問題是配方中的每一行都在單獨的 shell 呼叫中執行,因此在一行中設置的 shell 變數在後續行中不可見(請參閱為什麼目前目錄不會在 makefile 中更改?)。最重要的是,您需要將$符號加倍,以便 shell 看到$.

但是,您可以使用 Make 變數,而不是在這裡使用 shell 變數:

TEMP_FILE := $(shell mktemp)
test:
   echo "text goes into file" > $(TEMP_FILE)
   cat $(TEMP_FILE)
   rm $(TEMP_FILE)

引用自:https://unix.stackexchange.com/questions/634954