Skip to content

Instantly share code, notes, and snippets.

@Fuyutsubaki
Created May 31, 2019 18:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Fuyutsubaki/2198e04bd8b6dd71c6571d9af85c54e7 to your computer and use it in GitHub Desktop.
Save Fuyutsubaki/2198e04bd8b6dd71c6571d9af85c54e7 to your computer and use it in GitHub Desktop.
ninja.build 説明(書きかけ)

簡単一行

生きてるとプロダクトで 1ミリも知らない build.ninja が現れて、それをなんとか読んだりすることもあると思う そんなときのためにninjaについてメモっておく

基本的な説明(1)

# ファイルのコピー用ルール
rule copy
  command = cat $in > $out

build file1 : copy file2

ninjaでは大体 rulebuildを定義することでやっていく あと、# 以降がコメントになる

build

build ${出力ファイル}... : ${つかうrule} ${入力ファイル}...

  • 依存関係の定義
  • つかうruleの定義

を行う

rule

rule ${ルール名}
  ${なんかいろいろ設定1} = ${文字列1}
  ${なんかいろいろ設定2} = ${文字列2}
  • 入力と出力に対し行う処理
  • ほか色々

の設定を行う

基本的な説明(2)

cflags = -Wall

# C用ルール
rule cc
  cflags = -Wall -Wextra 
  command = gcc $cflags -c $in -o $out

build foo.o: cc foo.c

ninjaには変数がある。定数と言ってもいいかもしれない cflags =command = の部分が変数の代入、 $cflags $in $out の部分が変数の展開にあたる

同じ変数が複数ある場合、scopeが近い方が参照される

無いもの

  • if文は?
  • 関数は?
  • パターンマッチ(%.c)は?
  • サフィックスルールは?

無いよ。build.ninja 自動生成するレイヤーでどうにかして


出力ディレクトリ

ruleで使える 要素一覧

文法詳細

PHONY

makeででてきた

default

C++と.dファイル

他細かい話

ninjaの要求バージョン

同時実行数の制御

を行う

依存関係

「出力するファイルが存在しないとき」もしくは「タイムスタンプが 出力するファイル < 入力するファイル」の時、buildを行う 入力するファイル についても何らかのbuildが存在する場合、それについても再帰的に判断する

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment