C ++(およびCは、それほど重要ではありませんが)標準では、プログラム内のすべての変換単位が同じ定義を持つ必要があると規定されています。これには、コンパイラスイッチなどが含まれます。たとえば、MSVC ++では、すべての変換ユニットで適切なバージョンのCランタイムライブラリにリンクする必要があります(/MT
対/MD
対/MTd
対)。/MDd
ただし、使用したいサードパーティの依存関係がいくつかあり、次のようなものがあります。
- それらはすべて異なるビルドシステムを使用しています(autoconfがあり、cmakeがあり、独自の手巻きのものがあるように見えるものがあります。)
- ビルドシステムは、これらの種類のスイッチをすべて構成で公開しているわけではなく、ハードコーディングされているスイッチは、システムごとに設定が異なります。(たとえば、あるライブラリはとを強制
/MD
し/MDd
、別のライブラリはとを強制/MT
します/MTd
)
これらの種類のものを処理するための最良の方法が何であるかはわかりません。次のオプションについて説明しました。
- サードパーティの依存関係を中心に独自のビルドシステムを構築します。
- PRO:物事が一致することはわかっています
- PRO:クロスプラットフォームサポートを正しい方法で実行できることを私たちは知っています
- CON:サードパーティの各ビルドシステムがどのように機能するかは正確にはわかりません
- CON:たくさんの仕事
- CON:サードパーティの依存関係が変更された場合に中断します
- サードパーティのビルドシステムを使用して、必要な処理を実行するように変更してみてください。
- PRO:作業が少ないようです
- CON:サードパーティのシステムを壊す可能性があります
- CON:サードパーティの依存関係が変更された場合に中断します
- CON:私たち自身のビルドを本当に複雑にする
しかし、私たちは何をすべきかわかりません。そして、私たちはこの種の問題を抱えているのは私たちだけだとは信じられません。上記のオプションの1つを実行する必要がありますか、それとも私が考えていなかった3番目の選択肢を実行する必要がありますか?