/bin/shbashシステム上にある可能性がありますが、として呼び出されるとsh、bashPOSIXモードで実行されます(POSIXLY_CORRECT定義されている場合、またはで開始された場合--posix)。
このモードでは、プロセス置換は存在しません。
ソリューション:
all:
command1 >file1
command2 >file2
diff file1 file2
rm -f file1 file2
代替:
all:
bash -c "diff <(command1) <(command2)"
または、Makefile変数SHELLを/bin/bash次のように定義します。
SHELL=/bin/bash
移植性が必要な場合は、最初のソリューションを使用してください。への依存に問題がない場合はbash、2番目を選択します。さらにmake、GNU以外の実装について気にする必要がない場合は、3番目の実装を使用します。
設定についてSHELL:POSIX標準では、Makefileの実行可能ファイルは、system()Cライブラリ関数を使用して呼び出す必要があると規定されていmakeます。この関数は、SHELL環境変数の使用が保証されていません(実際には、標準で使用することはお勧めしません)。標準では、Makefile変数の設定SHELLが環境変数に 影響を与えてはならないということもありますSHELL。makeただし、私が知っているほとんどの実装では、Makefile変数SHELLを使用してコマンドを実行します。
ユーティリティの根拠でmakeの提案は、使用することbash -cです:
履歴MAKESHELL機能、および他のmake実装によって提供される関連機能は省略されました。一部の実装では、makeコマンドの実行に使用されるシェルをユーザーがオーバーライドできるようにするために使用されます。これは混乱を招きました。ポータブルのmake場合、シェルはmakefileライターが選択する必要があります。さらに、Makefileライターは、代替シェルを使用するように要求することはできませんが、Makefileを移植可能と見なします。代替シェルを指定するためのメカニズムを標準化することは可能ですが、既存の実装はそのようなメカニズムに同意しておらず、メイクファイル作成者はターゲットのルールでシェル名を指定することですでに代替シェルを呼び出すことができます。例えば:
python -c "foo"
bash一時ファイルを使用せずに、Makefileまたはdiff問題の他のソリューションで呼び出す方法はありますか?