2012-01-04 15 views
1

メイクが私にこれを与える理由を理解できません。私は「make clean:make」を実行してから「make install」を実行し、「make:installのために何もする必要はありません」と表示します。メッセージ。「インストール」のために何もする必要はありません。メッセージ

$(phony install): $(OBJFILES) 
    @$(shell cp $(OBJFILES) ../../) 

は、私が使用してからそれを変更:ここに私のインストール対象である:私はまた、偽の目標を行うための方法だったと述べオンライン誰かを見たので、 『$(偽のインストール)』に「.PHONYをインストールします」、私は困惑した。正直言って、私は自分のMakefileを書くのがむしろ新しいですが、それは十分に簡単なようです。私は何かが明らかでなくなっていると確信しています、そして、私はここで少しばかと感じるでしょう。 :P

さて、奇妙なことです。 makeはインストールターゲットを実行しているようですが、まだ「何もしない」と言っていますが、これは奇妙です。また、私が "make clean; make install"を実行すると、うまくインストールされ、そのようなメッセージは表示されません。したがって、 "install"が実行される必要があることがわかるように、オブジェクトファイルを再構築する必要があるときだけです。それは意味をなさない。私は "make; make install"を実行できるはずです!

答えて

1

レシピ内に$(shell ...)を使用する必要はなく、そのままコマンドを書き込むことができます。また、私は$(phony ...)について聞いたことがないし、それが有効でないと思う(--warn-undefined-variablesオプションでMakeを実行しようとする)。

.PHONY: install 
install: $(OBJFILES) 
    @cp $^ ../../ 
+0

$(shell cp ...)でした。私はあなたがそのようなコマンドを実行するときに$(シェル)を使わなければならないと思った。ありがとう! $(偽のインストール)はうまくいくようでした。 makeは "install"ターゲットを認識し、出力ファイル "install"を取得しないことにはまったく不平を言いませんでしたが、 ".PHONY:install"は標準的な方法です。たぶん$(偽のtarget_name)は古い方法で、下位互換性のためにサポートされていますか?知りません。 lol – Caleb1994

+0

http://makepp.sourceforge.net/1.19/makepp_tutorial.html#Phony%20targets これは私が偽のターゲットの構文を見つけた場所です。私はちょうどチュートリアルがmakeppではなく、GNU makeであることに気がついたが、GNU makeはまだそれを受け入れた。 – Caleb1994

+0

@ Caleb1994はい、私はmakeppではなくGNU Makeを使用しました。 –