mv *.cache.{js,woff} サブフォルダ - シェルコマンドとして機能しますが、Makefile 内では機能しません

mv *.cache.{js,woff} サブフォルダ - シェルコマンドとして機能しますが、Makefile 内では機能しません

何かを構築した後、 でmake終わるすべてのファイルを.cache.{js,woff}サブフォルダーに移動します。

(cd $(PFROOT)/PVWR2/gwt/pdfwebviewer/; \
mkdir -p cache_files; \
mv *.cache.{js,woff} sub_folder)

問題は、実行時にファイル名としてmake解釈され*.cache.{js,woff}、動的なものではないようで、もちろん明示的な名前を持つファイルは存在しないことです*.cache.{js,woff}。上記のコマンドを使用して、フォルダーに移動してシェルから手動で移動すると、問題なく動作します。

これはグロビングに関係していることは理解していますが、これを修正する方法がわかりません。

答え1

{...}は中括弧展開用の bash 固有の構文ですが、make は/bin/shデフォルトで の代わりにを使用しますbash

info make、セクション5.3.2より:

シェルとして使用されるプログラムは、変数から取得されますSHELL。この変数が makefile に設定されていない場合は、プログラムが/bin/shシェルとして使用されます。

bash を使用して Makefile 内のシェル構造を解析する場合は、先頭に次のコードを追加します。

SHELL := /bin/bash

関連情報