CMake のデフォルトの動作は、C などの同じ言語で複数のコンパイラを利用しようとするときに課題を引き起こします。この構成では、すべての C ソース ファイルに対して単一の CMAKE_CXX_COMPILER を必須とし、単一の CMakeLists.txt 内でターゲットごとのコンパイラを指定することを禁止します。これは、ホスト操作とクロスコンパイル操作を組み合わせるときに重大な障害となります。
ターゲットごとのコンパイラーのオーバーライド
この問題に対処するために、本能的にコンパイラーをオーバーライドする方法を求める人もいるかもしれません。ターゲットごとにコンパイラを選択します。ただし、CMake にはこの柔軟性はありません。 CMakeLists.txt ファイル内のすべてのターゲットに適用できるコンパイラ プロパティの単一セットを維持します。
単一コマンドのジレンマ
対応するために CMake を複数回実行する規定のアプローチコンパイラが異なると、単一のコマンドでビルドするという理想的なシナリオが中断される可能性があります。この不便さを軽減するために、ユーザーはカスタム コマンドに頼ることがあります。ただし、このソリューションはビルド プロセスの明確さと保守性を損ない、美化されたシェル スクリプトに似ています。
CMakeLists.txt を分離: 実用的なソリューション
より洗練されたソリューションがあります。単一の CMakeLists.txt 内に複数のコンパイラ構成が含まれないようにするためです。異なるアーキテクチャ間でリンクすることが不可能であることを考えると、それらを同じファイル内に共存させる説得力のある理由はありません。共通の CMake スクリプト要素を再利用可能な個別のファイルにリファクタリングすると、より優れたコード編成が可能になります。
このアプローチの欠点は、単一コマンドによるビルド機能が失われることです。この不便さは、複数の CMake-makefile の実行を調整するラッパー スクリプトを構築することで解決できます。単一のビルド コマンドの見かけの単純さは損なわれる可能性がありますが、最終的には懸念事項の明確な分離とコード管理の向上が促進されます。
以上が## CMake は 1 つの CMakeLists.txt で同じ言語の複数のコンパイラーを処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。