ファイルをファイル名に日付時刻付きでコピーすることは 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 では、$(...)は複数文字の変数の展開を表します。という変数makeがないので、空の文字列に置き換えられます。makedate +"%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"

関連情報