Skip to content
Latchkey

SCons vs CMake: Pythonのビルドか、ジェネレータか?

SConsはPythonスクリプトを設定として使い直接ビルドします。CMakeは他のツールが実行するネイティブなビルドファイル(Ninja、Make、IDEプロジェクト)を生成します。

SConsはビルド設定にPythonを使い、信頼性の高いコンテンツベースの依存関係チェックでビルド自体を実行します。これはビルドロジックに本物のプログラミング言語を求めるチームに好まれます。一方CMakeはNinja、Make、IDE向けのビルドファイルを生成し、広大なエコシステムとパッケージマネージャのサポートを持つC/C++の事実上の標準になっています。SConsは柔軟ですが遅く、採用も少なめです。CMakeは実際には高速で、はるかに手厚くサポートされています。

SConsCMake
モデル直接ビルドするビルドファイルを生成する
設定言語PythonCMake DSL
依存関係チェックコンテンツベースタイムスタンプ(バックエンド)
エコシステム小さめ事実上の標準
最適な用途Python駆動のビルドロジック幅広いC/C++の相互運用

CIでの利用

CMakeはエコシステムのサポートと高速なNinja出力のおかげで、ほぼどんなC/C++ pipelineにもフィットし、安全なデフォルトです。SConsは複雑なビルドロジックに完全なPythonが欲しいときに魅力的ですが、遅くなりがちで、CMakeの幅広い統合を手放すことになります。今日のCIの多くは、プロジェクトがSConsに深く投資していない限りCMakeに標準化しています。

高速化する

build の成果物をキャッシュし、コンパイル済みオブジェクトにccache/sccacheを使います。どちらもCIランナー上でビルドされ、より高速なマネージドランナーはconfigureとコンパイルのステップを短縮します。

結論

手の込んだビルドロジックのために完全なPythonが欲しく、すでにそれに投資している場合: SCons。C/C++向けの標準的で手厚くサポートされ高速な道と幅広いツールが欲しい場合: CMake。新規プロジェクトは圧倒的にCMakeを選び、SConsは確立された既存コードベースに残ります。

関連ガイド