2011-07-12 12 views
1

Qt 4.5プロジェクトには、SUBDIRS qmake変数を持つルート.proファイルがあります。このルートの.proファイルでqmakeが呼び出されると、各サブディレクトリに対して "qmake & & make"を呼び出すMakefileが生成されます。qmakeから生成されたメークファイルのパフォーマンスを改善する

問題は100以上のサブフォルダでは、他の賢明な最新のプロジェクトの1つのライナーの変更が検出されるまでに長い時間がかかります。プロジェクトのルートでmakeを実行すると、最初にディレクトリをすべてのサブディレクトリに変更し、何もしません。実際に作業が必要な1つのディレクトリが見つかるまで実行します。(今のところ、手動​​でコードを変更したことを知っているフォルダに手動でcdし、makeを実行するだけです。

理想的にはルート.proファイル微調整する必要がありますが、私はルートMakefileをハックする答えも受け入れます。

些細な時間を減らすための提案はありがたいです。

答えて

2

これは、recursive make considered harmful理論の古典的な議論です。問題は、1つの大きなメイクファイルではなく、1つのメイクファイルが数多くあることです。苦境を回避する唯一の方法は、.proファイルをリファクタリングして、単一のMakefileだけが生成されるようにすることです。私はそれをする方法を教えてくれるほどqmakeについては十分に分かっていませんが、申し訳ありません。

+1

再帰的なmakeの問題は、多くのMakefilesがあるという事実ではありませんが、多くのmakefileを生成すると、ファイルの依存関係を正しく設定しないという事実です。つまり、あなた(qmake)は依存関係がないことを恐れているため、必要な依存関係がさらに増えます。したがって、makeは不要なファイルを作成しているので時間がかかります。 – Shahbaz

+0

再帰的なMakefileを正しく書くと、それらは提案された方法と同じパフォーマンスを持ちます。しかし、どのファイルにどの依存関係があるのか​​が煩雑になる可能性があることを示す多くのマニュアルが含まれていますが、それは別の問題です。 – Shahbaz

+0

@Shahbaz:Peter Millerは、リンクされた論文の中で状態を立てています(と私は思います)。各サブメイクの呼び出しに対する依存関係ツリーの追加の再解析はmakeの実行時間にとって重要な要素です。そして、私はOPは彼の記事では、超巨大なコンパイラの実行は彼の問題ではないようだが、むしろ "何もしない"という呼び出しに注意していると思います。 – thiton

関連する問題