2012-03-05 3 views
0

私はMakefileの新機能ですから、私はおそらくこれを最善の方法でやっていません(入力方法は非常に分かります。とにかく、ここに私の問題があります:デーモン用メークファイル

私は私のプログラムのために書いたデーモンを持っていて、私はMakefile(ターゲットは "インストール")でインストールしようとしています。 "インストール"ターゲットは、デーモンバイナリをある場所に移動し、 "サービススクリプト"を/etc/init.d/または/etc/rc.d/に移動します(異なるディストリビューションには異なるフォルダが存在するため...)。ここに私のメイクは、これまでのところです:

all: 
     @echo "Making Components" 
     @cd Daemon; make 
     @echo "Components Built" 
install: 
     @echo "Installing Components" 
     @mkdir -p /usr/lib/ 
     @cp Daemon/myprog_d /usr/lib/myprog_d 
     [email protected] -d /etc/init.d && cp Scripts/myprog /etc/init.d/ 
     [email protected] -d /etc/rc.d && cp Scripts/myprog /etc/rc.d/ 
     [email protected] ! -d /etc/init.d -a ! -d /etc/rc.d && echo " Warning: Couldn't install script. Manually install Scripts/myprog" 
     @mkdir -p /var/log/ 
     @echo "Installed." 
uninstall: 
     @echo "Uninstalling Components" 
     @./Scripts/myprog stop > /dev/null 
     @rm -f /usr/lib/myprog_d 
     @echo "Uninstall complete" 
clean: 
     @echo "Cleaning Components" 
     @cd Daemon; make clean 
     @echo "Clean complete" 

あなたが見ることができるように、これらの二つのディレクトリが存在すると、彼らがしなければ、それらにコピーするスクリプトは、(私はまだ行っていないかどうかを確認するために、ターゲット・テスト「をインストール」それを "アンインストール"するには、心配しないでください)。

私の最初の質問:これは正しい方法ですか? 「すべて」と「クリーン」のターゲットが動作します(推測できるように、「Daemon /」に別のメイクファイルがあります)が、これを行うためのよりクリーンな方法があるかどうかを知りたいと思います。

第2に、 "test"関数がゼロ以外の値を返すため、エラーが無視される前に " - "する必要がありました。残念ながら、その「make install」を出力ビーイングにおける結果:

非常に醜い、おそらくない良い方法です
Installing Components 
make: [install] Error 1 (ignored) 
make: [install] Error 1 (ignored) 
Installed. 

。この場合、私は何ができますか? ( - @と@ - 私は両方を試してみましたが、@は "無視" の出力を抑制しません)私はそれをこのようにしてください、心から クリス

答えて

1

を:

@if [ -d /etc/init.d ]; then cp Scripts/myprog /etc/init.d/ ; fi 
@if [ -d /etc/rc.d ]; then cp Scripts/myprog /etc/rc.d/ ; fi 

そして、私は少しあなたの次の行([email protected] ! -d /etc/init.d -a !...)で混乱しているが、あなたはおそらく同じようにそれを行うことができます。

これはエラーメッセージを処理しますが、メイクファイルをそのまま保つ場合は、make -sを実行してメイクファイルを抑制することができます。

+0

ありがとうございました!その最後の行は、「どこに移動するのか見つけられませんでした」と言うだけでした – Chris