Io-Redirection
在 makefile 中使用 mktemp
我想創建一個臨時文件並使用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)