dポイントプレゼントキャンペーン実施中!

Linux上でソースコンパイルのためのMakefileを書いてるんですが、インストール先をmake実行者に標準入力から入力させたいんですよ。

bashのreadコマンドで変数に入れられんのかな?と思って以下のように書いて実行しましたがうまく行きません。
-------------------------------------------------
install :
@read -p "install dir << " DIR
cp -p ${FILE} ${DIR}
-------------------------------------------------
echoさせてみると${DIR}は空っぽみたいです。

どなたか、書き方を教えてください。

A 回答 (2件)

makeでは実行行は1行ずつ、sh -c "行内容" のようにして実行されるので、次の行に変数を引き継ぐことは出来ません。



install:
 @read -p "install dir <<" DIR;cp -p ${FILE} $${DIR}

のように1行にすればOKです。$${DIR}と$を重ねるのは、make が sh に渡す前に変数展開してしまわないようにするためです。
ただし、上記のようにすると、cp まで @ が効いて表示されないので、表示したければ、

 @read -p "install dir <<" DIR;echo cp -p ${FILE} $${DIR};cp -p ${FILE} $${DIR}
    • good
    • 1
この回答へのお礼

ありがとうございました。これで解決です!
とあるモジュールのインストール先がそれぞれ使うユーザーによって異なるというもので、単にmakeした後で勝手にcpしてもらっても良かったんですが、使う側の技術レベルがまちまちなんで親切機能をつけてやりたかったんですよ。感謝!

お礼日時:2005/10/14 09:48

make で対話的な処理を行うのはあまり一般的ではありません。



インストール先をユーザに入力させたいのであれば、make に '=' を含む引数を渡すと、変数指定であるとみなされるので、上記の例なら

host% make install DIR=/usr/local/foo

などとさせる方法がありますが、それではダメでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!