6

私は非常に大きな C プロジェクトを持っており、多くの個別の C ファイルとヘッダー、および何十もの貢献者がいます。多くの貢献者は、makefile と依存関係について十分な知識を持っていません。その結果、「make」が正しい出力を生成したことを信頼できるようになる前に、ほとんどの場合「make clean」を行わなければならないという珍しい問題が発生します。

make に数分かかったとしても、これは問題にはなりませんが、今では高速なマシンで 2 時間近くかかります。人々は make 時に動作するコードをチェックインし始めていますが、最初にクリーンアップを行わず、最終的にコードが壊れます。ビルド。新しいベースラインがカットされる前に、これらがビルド マネージャーによってキャッチされない理由を尋ねないでください...

はい、ここまで放っておくべきではありませんでした。

はい、開発者を教育しています。

いつものように、すべてを停止して手動で修正する時間はありません。

これらの線に沿ったツールがあると思います:

  • C および H ファイルから既存のプロジェクトの正しい依存関係情報を作成するのに役立つ自動ツールはありますか?
  • メイクファイルに従って依存関係情報を記述する自動ツールはありますか?
  • 上記の 2 つの依存関係ツリーの違いを説明するツールの聖杯はありますか?

しかし、この問題を解決するために他に何ができる/すべきでしょうか?

前もって感謝します...

-アダム

4

4 に答える 4

6

Make から依存関係を自動的に検出するツールに切り替えるのが最も簡単かもしれません。たとえば、SConsは依存関係を一覧表示するのではなく、コンパイルされているファイルを自動的に解析してインクルードを探します。どのファイルをコンパイルするか、どのファイルをどの実行可能ファイルに入れるかを指定するだけです。開発者が実際には Make の専門家ではないという事実のために、ビルド システムの切り替えはより簡単になります。

Make に固執する場合の別の代替方法は、gcc -M依存関係を自動的に検出するオプションを使用することです。C の依存関係を自動的に検出する質問への回答には、依存関係を手動で指定する必要がないように、makefile で依存関係を自動的に検出する方法の例があります。

于 2008-10-27T14:33:09.487 に答える
4

automake と autoconf の組み合わせ:

http://sources.redhat.com/automake/automake.html#はじめに

もっと:

http://sources.redhat.com/automake/automake.html#Why-Autotools

HTH

于 2008-10-27T14:44:43.567 に答える
3

私の職場でも同じ問題があります。トランクは、マージまたはチェックイン後に常に壊れていました。

開発用マシンでは約 2 時間かかるのに対し、約 45 分でメイク クリーンを実行する継続的な統合ビルド マシンをセットアップしました。統合サーバーは 2 時間ごとに SVN リポジトリをポーリングして新しいチェックインを探し、メイク クリーンを開始します。

そうすれば、ビルドがいつ壊れたのかを正確に監視し、すぐに修正できます。私たちは継続的インテグレーション サーバーとしてHudsonを使用しています。これは無料でオープン ソースであり、芸術作品であり、セットアップが非常に簡単です。さらに、ユーザー インターフェイスは非常に直感的で、他のすべての開発者が気に入っています。

乾杯、

于 2008-10-27T14:42:45.190 に答える
2

これを解決する標準的な方法は、コンパイラーに依存関係情報を自動的に生成させることです。このようなもの(gccを想定すると、同様のオプションについてコンパイラをチェックする必要があります)

SOURCES=foo.c bar.c

%.d: %.c
    $(CC) $(CFLAGS) -MM $< >$@ 

include $(SOURCES:.c=.d)

GNU Makeマニュアルには、前提条件の自動生成に関する章があります。

編集:私は通常、この種の問題が発生したときにCMakeの使用を開始することをお勧めします。

于 2008-10-27T16:59:53.013 に答える