日付/時刻を使用したファイル名へのファイルのコピーはbashでは機能しますが、makefileでは機能しません。

日付/時刻を使用したファイル名へのファイルのコピーはbashでは機能しますが、makefileでは機能しません。

bash シェルでは、次の操作が実行されます。

cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"

しかし、makefileにはありません。どうすれば解決できますか?

生成されたファイルは次のとおりです。

b:
    cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"

"make b"を実行すると、bashは次のように言います。

cp abc.tex "abc-.tex"

答え1

Makefile内の$(...)複数文字変数の拡張を表しますmakemakeという変数がないため、date +"%Y-%m-%-d-%H-%M-%S"空の文字列に置き換えられます。

make$(...)シェルの使用をコマンドの代わりに実行するには、次のように作成します$$(...)

b:
        cp abc.tex "abc-$$(date +"%Y-%m-%-d-%H-%M-%S").tex"

GNUmakeバリアントはシェルのコマンド置換と同様に機能しますmake$(shell ...)

答え2

たぶんマクロを探しているかもしれません$(shell ...)

b:
    cp abc.tex "abc-$(shell date +"%Y-%m-%-d-%H-%M-%S").tex"

これにより、次のような出力が生成されます。

> make b
cp abc.tex "abc-2021-10-21-16-54-02.tex"

関連情報