2011-07-01 9 views
3

コンパイルフラグやMakefile.am(またはconfigure.acなどの上位レベル)の変数が変更された場合、autoconf/automakeビルドシステムを使用すると、自動的には再構築されません。これは、Automakeを、必要に応じて再コンパイルする連続ビルドシステムの一部として使用するときに、特に重要になります。Makefileが変更された場合、Automakeはソースファイルを再構築します

私の考えは理論的に上記の問題を解決する.oファイルの依存関係としてMakefileを含めることでした。だから、いくつかの質問:

まず、そのようなルールを追加することは可能ですか?私はすべての単一のMakefile.amにそのカスタムルールを追加する必要はないので、トップレベルのファイル(configure.acなど)に配置できるものは素晴らしいでしょう。

第2に、このアプローチの欠点は、Makefileへの変更が実際にコンパイルに影響を与えないことがあるため、実際には必要ないときに再構築が終了することです。私は、私のビルドが正しいことをより良く保証するために、これと一緒に暮らそうとしている(少なくとも、それがどれほど痛いのか見てみる)のですが、この問題を解決する良い方法はありますか?私はclearmakeが実際のコンパイラコマンド(他の依存関係と一緒に)を保存し、現在のコマンドと前のコマンドを比較して、ファイルを再生成する必要があるかどうかを判断することでこれを解決すると信じています。

+0

変更されたmakefile変数に基づいたものを再構築するのは間違っています。なぜなら、GNU stowのようなツールに必要な 'make install prefix =/some/other/prefix'のようなものを壊すからです。 –

+0

@JackKelly一般的には悪いことがわかりますが、AM_CPPFLAGSのような特定のフラグを変更すると再構築が必要なようです。例えば、 '.../somelib-v2'を' .../somelib-v3'に変更した場合、コードは確実に再コンパイルする必要があります。再コンパイルを強制するために実際のMakefile *の変更を得ることができたら、私は変数のコマンドライン設定を忘れてしまいます。ポインタtobuのために –

答えて

2

ccache(./configure CXX='ccache g++'、またはパスにccacheのg ++​​を追加するだけ)の場合、偽の再構築は非常に安価で安全です。 AM_MAINTAINER_MODE autoconfマクロを決して使用しないようにしてください。依存関係のトラッキングはオプションです(--enable-maintainer-modeフラグの条件付き)。

+0

ありがとう。 makefileの規則がそうでなければコンパイラを呼び出すときにのみccacheが呼び出されるようです。だから私はビルドフラグを変更し、automakeは再構築の必要性を検出しない場合、ccacheはまだ助けていますか?申し訳ありませんが、私は雑草の中でccacheがどのようにフィットするかについて議論しています。 –

+0

@Nathanはい、* .oをMakefileに依存させるためのルールが必要です。 – Tobu

+0

清算していただきありがとうございます。私は誰かが私の質問のその部分の答えを提供することができることを期待して、未回答のままにしておくつもりです。 –

関連する問題