私は複雑な C++ プロジェクトを管理しています。そのビルド定義は で記述されCMake
、ビルド自体は を呼び出すことによって取得されmake
ます。ソースツリーは多くのモジュールで構成されており、並列化が容易です。
線形ビルドは常に成功しますが、並列ビルドはほとんどの場合成功します。このようなビルド中に依存関係の問題が発生した場合、通常は修正に取り掛かりますが、問題が発生したときに修正するのではなく、依存関係をプログラムでテストしたいと考えています。
理想的な解決策は、すべての依存関係をCMake
調べて修正することですが、ソース ツリーに固有のある種の依存関係に対してカスタム マクロを頻繁に使用するため、これが実際に常に可能であるとは限りません (詳しくは説明できません)。 、 ごめん)。そこで、標準ツールをできるだけ再利用して、問題を別の方法で (そしておそらく効率的に) 解決することを考えていました。
私が最初に考えたのは、ジョブ スケジューリングにある種の「ランダム性」を注入することでした
Make
。これにより、ビルド マシンは、障害が発生するまでツリーを再構築することで、さまざまなコンパイル パスを無期限に試行できるようになりました。ただし、別の質問(こちら)では、この機能は では使用できないと指摘されましたMake
。だから私は別の解決策を試しました.ジョブスケジューラにノイズをもたらす
g++
ために、数秒間スリープするラッパースクリプトを作成しました。もちろん、このソリューションの欠点は、コンパイル時間が長くなることです。 ただし、この部分的な解決策には根本的な欠陥があります。問題が見つかった場合、依存関係が存在しないことが証明されますが、エラーが発生しなければ、すべての依存関係が正しいことを証明することはできません。$RANDOM
Make
どう思いますか?どうすれば目標を達成できますか? 標準ツールを再利用し、幅広いユーザーに適用できるソリューションを希望します。
ありがとう。