Makefileで%
が間違っているようです。 myotherlibのみが構築されつつ、MYLIBは常に、(第2 make mylib
呼び出しが再びtouch
コマンドを実行している)に再建され%が常に再構築されたgnu makeターゲットはなぜですか?
> make mylib
touch mylib-13.dll
> make mylib
touch mylib-13.dll
> make myotherlib
touch myotherlib-13.dll
> make myotherlib
make: Nothing to be done for `myotherlib'.
:出力
mylib: mylib-%.dll
mylib-%.dll:
touch mylib-13.dll
myotherlib: myotherlib-13.dll
myotherlib-13.dll:
touch myotherlib-13.dll
:この単純なメイクファイルは問題
Makefileを示し一度。
mylibが必ずしも再構築されないように、つまりmake mylib
への2回目の呼び出しでmake: Nothing to be done for 'mylib'.
が返されるようにする必要があるのはなぜですか。
説明していただきありがとうございます。私が%を使用しようとした理由は、Makefileをバージョン番号に依存させたくないため、バージョンを増やすときに変更する必要はありません。 mylib-14.dllへ。私はそれを行うための他の方法があるのだろうかと思います。面白いことに、mylib - %。dllという名前のファイルがルールがパターンルールのときに作成されることを期待しています... –
彼はあなたがそれをルールの要件部分に入れているので、彼はそれを期待しています。より柔軟なものを使いたい場合は、バージョン変数、つまり 'mylib - $(LATEST_DLL_VERSION).dll'を使用してルールの上に宣言して、単一のアクセスポイントを持つことができます。 しかし、ある時点では、バージョン番号をバンプするときにシステムが魔法のように知っているとは思えません。あなたはどこかにそれを伝えなければなりません。 – Chnossos
これも私がやったことですが、バージョン番号を付ける必要はありません。私のシナリオは:私のアプリケーションは第三者のライブラリに依存しています。 makefileにはライブラリがありませんが、私が使っているバージョン番号は本当に気にしませんが、ここのコメントには当てはまらない別の質問です... –