5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ビルドツールのベンチマーク試行

Last updated at Posted at 2018-02-18

ビルドとは

コンパイル+リンク(ライブラリの関連付け)を実行し、ファイルを生成すること
※ コンパイルとは ... コンピュータが実行するのに適した形式に変えて実行可能なファイルに変換すること

ビルドツールとメタビルドシステム

  • ビルドツール
    • 依存関係を解決しながらコマンドを実行するツール
    • 依存するファイルが更新されるとコマンドを再実行する
    • 例;make, ninja, scons など
  • メタビルドツール
    • ビルドに必要なファイルを生成するツール
    • 環境に応じたmakefileを作成する
    • 例:autotools, cmake

ビルドツールの実行時間測定

ゴール

各ビルドツールのビルド時間、使い勝手の比較

対象ビルドツール

make, scons, ninja

ビルド時間測定

4つの条件からソフトウェアのビルド時間を測定。

  1. cold start(最初のビルド)
  2. full rebuild(ソースファイルすべてに変更を加えてビルド)
  3. leaf build(特定ソースファイルだけ変更を加えてビルド)
  4. nothing to do(ソースファイル変更がない状態でのビルド)

ビルド対象のソフトウェア

main関数は、用意されたサブディレクトリのグローバル関数を再帰的に呼び出す。
各サブディレクトリに定義されている関数はメッセージ出力するだけ。

測定方法

サブディレクトリ数を10, 100, 1000 に変更して time コマンドでビルド時間を測定する。

結果

結論、ninjaが圧倒的なビルド時間の速さを示した。

測定環境

  • OS: Ubuntu 14.04.4 LTS, x86_64
  • CPU: Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz (24 core)
  • RAM: 128GB

各ビルドツールのバージョン

  • make 3.81
  • scons v2.3.0
  • ninja 1.3.4

測定結果

5回測定した平均、最小、最大ビルド時間を示す。単位は"秒"

ビルドツール/サブディレクトリ数: 10 cold_start full rebuild leaf rebuild nothing to build
make avg 0.39
min 0.38
max 0.40
avg 0.41
min 0.41
max 0.41
avg 0.08
min 0.07
max 0.08
avg 0.01
min 0.01
max 0.01
scons avg 0.79
min 0.72
max 0.89
avg 0.73
min 0.60
max 0.81
avg 0.27
min 0.23
max 0.33
avg 0.23
min 0.18
max 0.27
ninja avg 0.07
min 0.06
max 0.08
avg 0.00
min 0.00
max 0.00
avg 0.00
min 0.00
max 0.00
avg 0.00
min 0.00
max 0.00
ビルドツール/サブディレクトリ数: 100 cold_start full rebuild leaf rebuild nothing to build
make avg 3.25
min 3.23
max 3.26
avg 3.44
min 3.43
max 3.45
avg 0.16
min 0.16
max 0.16
avg 0.04
min 0.04
max 0.04
scons avg 4.74
min 4.68
max 4.85
avg 4.94
min 4.91
max 4.99
avg 0.91
min 0.85
max 0.97
avg 0.91
min 0.85
max 0.97
ninja avg 0.23
min 0.23
max 0.24
avg 0.12
min 0.02
max 0.26
avg 0.02
min 0.00
max 0.07
avg 0.00
min 0.00
max 0.00
ビルドツール/サブディレクトリ数: 1000 cold_start full rebuild leaf rebuild nothing to build
make avg 32.97
min 32.93
max 33.05
avg 35.75
min 35.49
max 36.15
avg 1.75
min 1.74
max 1.78
avg 0.34
min 0.28
max 0.39
scons avg 53.32
min 53.20
max 53.55
avg 55.17
min 54.94
max 55.37
avg 10.50
min 10.45
max 10.58
avg 5.34
min 5.31
max 5.36
ninja avg 2.72
min 2.57
max 2.86
avg 2.67
min 2.64
max 2.72
avg 1.27
min 1.20
max 1.35
avg 0.01
min 0.01
max 0.01

使い勝手

あくまで個人的な意見です。

ビルドツール pros cons
make 暗黙的表記によって記述を最小限にできる 学習コストが高い
scons pythonスクリプト感覚で記述できる ドキュメントが少ない
ninja makeと比較すると直感的 記述量が多くなりがち
ドキュメントが少ない

結論

無難どころは make という印象が調査結果。
ninjaは記述量が多くなるので、build.ninja作る部分はスクリプト化しないとメンテナンスが難しそう

  • ビルド時間
  1. ninja 2. make 3. scons
  • 使い勝手
  1. scons 2. make 3. ninja

感想

bazelも気になる

ソースコード

reference

5
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?