17

シェルで以下のコマンドを実行すると、正常に動作します。しかし、それを Makefile に書いて「make」コマンドで呼び出すと、うまくいきません。

cp wpa_{cli、サプリカント、パスフレーズ、イベント} /usr/local/bin/

「make」コマンド後のエラー:

cp: `wpa_{cli,supplicant,passphrase,event}' を stat できません: そのようなファイルまたはディレクトリはありません

Makefile で動作させるにはどうすればよいですか? Ubuntu 12.04 を使用しています。他の Linux ディストリビューションでも同じ Makefile が動作します。

4

3 に答える 3

26

Make はデフォルトで昔ながらの Bourne シェル (/bin/sh) を使用しますが、これはブレース展開をサポートしていません。まだ設定されていない場合は、メイクファイルの SHELL 変数を /bin/bash に設定します。

makefile の先頭に次の行を追加するだけです。

SHELL=/usr/bin/bash

(bash パスを確認してください)。

于 2012-10-11T11:39:34.250 に答える
1

Steve K が説明するように、それはバシズムです。標準にもっと厳密に準拠したい場合は、 for ループを問題なく使用できます。

for x in cli supplicant passphrase event; do cp -v wpa_$$x /usr/local/bin/; done

makefile の場合と同様に、すべてを 1 行にまとめるか、バックスラッシュを使用して数行に分割します。2 つのドル記号は、make が を$シェルに渡す必要があることを示します。

于 2019-12-06T18:00:39.740 に答える