GNU Make には 2 種類の変数があります。再帰的に展開された変数を使用しましたが、単純に展開された変数が必要です。http://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavorsを参照してください
現在の Makefile では、変数には正確なテキストが含まれており、参照するたびにそのテキストが逐語的に置換されるため、Makefile は次のようになります。test.date +"%Y.%m.%d %H:%M:%S"
.txt
test:
@echo test.`date +"%Y.%m.%d %H:%M:%S"`.txt
@sleep 2s
@echo test.`date +"%Y.%m.%d %H:%M:%S"`.txt
このように見ると、シェルがdate
コマンドを 2 回実行していることは明らかです。
必要な動作を得るには、単純に展開された変数を設定する必要があり、それを定義した場所でシェル コマンドを実行する必要があります。バッククォートはシェルのメタ文字であるため使用できませんが、Make はそれらを無視するため、代わりにMake のshell
関数を使用します。
FILENAME := test.$(shell date +"%Y.%m.%d %H:%M:%S").txt