2016-09-19 2 views
0

私は、現在私がクリーンアップして少し単純化しようとしている(非常に畳み込まれた)ビルドシステムを持っています。これは、あらゆる種類の相互依存する環境変数を設定し、次にmakeを開始するPerlスクリプトを中心にしています。 makeが呼び出される対象は、Perlスクリプトに渡される引数、その他の環境変数、および現在の月面に依存します。偽のターゲットをターゲットエイリアスとして使用する

メイクファイルにはあま​​りにも多くの偽のターゲットが含まれているため、必要がなくてもターゲットが常に再構築されます。これは巨大な時間の浪費です。ターゲットは、(直接的または間接的に)1トンの偽のターゲットに依存し、偽のターゲットは常に「古くなった」とみなされるため、不必要に多くのものが更新されます。

なぜ多くの偽のターゲットがあるのか​​という理由は、私たちのmakefileは決して直接呼び出されることはありませんが、以前に言及したPerlスクリプトを通して、そして偽のターゲットを持つことによって、Perlスクリプトは正確なパス名ユーザーが更新したい特定のターゲットの

私の意図は、ターゲットがもう偽のターゲットに依存しないようにすることです。私はすべての偽のターゲットをコンクリートの非偽のターゲットに変換して、各ターゲットのツリーに依存しないツリーのみが含まれるようにしたい。 Perlスクリプトで個々のターゲットに簡単にアクセスできるようにするため、それぞれのターゲットに対して具体的なターゲットを言及するだけでビルドレシピにエコーを表示する以外は何もしない新しいターゲットを追加します。

私はmakeにあまり精通していないので、これが意図したとおりに動作するのか、意図しない結果が生じるのか尋ねたいと思います。

答えて

2

意図(とそれを行うための正しい方法がある)、これは動作しますが、あなたは最初が偽の使用抽象的な名前離れ、他の具体的な目標に応じて、それらを持つ、すべての具体的な目標を作成し、ことを提供しました具体的なものを前提とした目標。言い換えれば、具体的なターゲットは自分自身で立ち上がって、フォニに依存してはいけません。

ちなみに、レシピを空のままにしておくこともできます(ダミー "echo"は不要です)。

+0

ああ、私はレシピなしで目標を持つことができなかったことを知りませんでした。 :) – antred

関連する問題