ポーテージが更新されると、パッケージ全体が再構築されますか?

ポーテージが更新されると、パッケージ全体が再構築されますか?

Gentooシステムを更新するとき、Portageは新しいソースをインポートして抽出し、すべてを最初から再コンパイルしますか、それとも既存のソースに抽出して変更されたファイルのみをコンパイルしますか?

ベストアンサー1

多くのビルドシステム(autotoolsなど)は増分コンパイルをサポートしていますが、make(1)Portageを含むGentooはそれを利用しません。パッケージがコンパイルされインストールされた後、作業ディレクトリは削除されます。

増分コンパイルを使用する際の実用的な困難は、このようにパッケージを確実に構築することです。常にクリーンビルドを実行している場合は、ビルドが正常で正確で再現可能であることを確認する方が簡単です。 Gentooが増分再構築をサポートしようとすると、多くのビルドシステムが微妙に中断されます。また、ほとんどの場合、生成された./configure新しい環境変数または更新された環境変数を生成することができる再実行(またはそれに対応するもの)が必要ですconfig.h(例:CFLAGSおよび(または他のビルドシステムを使用している場合はそれに対応するものなど))。 。タッチを使用するには、ほとんどのソースを再設定する必要があります。変更が発生した場合、パッケージが使用されていないと、すべてのソースがviaを介して渡される可能性があります。CPPFLAGSMakefileconfig.hPACKAGE_VERSIONMakefileCPPFLAGSconfig.hしなければならない新しい値を表示するには、再構築してください。一部のソースファイルが特定のCプリプロセッサマクロを参照していないため、再コンパイルする必要がないと仮定できない場合はそうです。

したがって、最終的には、Gentoo開発者がパッケージバージョンの更新間の増分コンパイルをサポートするために多くの努力をしているにもかかわらず、多くのパッケージは必要完全に再コンパイルされるか、make(1)最終的に完全に再コンパイルされます(たとえば、config.hタイムスタンプが変更された場合)。したがって、これは非常にわずかな利点のみを持ち、高価な作業になる可能性があります。たくさん~の微妙なエラー、頑張ってご理解いたします。だから私はそのような機能を紹介したくありません。

私の答えは主にautotools / simple型パッケージを参照していますMakefileが、すべてがそのように構築されるわけではないので、正確な理由は問題の正確なパッケージによって異なる場合があります。

おすすめ記事