Ninjaを使用してC言語のHello Worldプログラムをビルドする手順は次のようになります。まず、Hello WorldのCプログラムを作成しましょう。
新しいテキストファイルを開き、次のようなコードを入力し hello.c という名前で保存します。
int main() {
    printf("Hello, World!\n");
    return 0;
}
次に、ビルドスクリプト用のテキストファイル build.ninja を作成します。以下は、手動でNinjaのビルドファイルを作成する例です。
rule compile
  command = cc -o $out $in
  description = Compiling $in
build hello: compile hello.c
この build.ninja ファイルでは、hello ターゲットを作成するための compile ルールを定義しています。この compile ルールは、cc を使って hello.c をコンパイルし、hello という実行可能ファイルを生成します。
コマンドラインで、以下のコマンドを実行してNinjaを使ってビルドを実行します。
% ninja
[1/1] Compiling hello.c
% ./hello 
Hello, World!
これにより、手動で作成した build.ninja ファイルを使用して、hello.c をコンパイルし、hello という実行可能ファイルを生成できます。
ただし、この手法は非常に基本的な例です。実際のプロジェクトでは、多くの場合、複数のファイルや複雑な依存関係、オプション、ライブラリなどがあります。その場合、手動でビルドファイルを作成することは非常に手間がかかるため、CMakeなどのツールを使用することが一般的です。
CMakeを使用してNinjaビルドシステムを構成することで、C言語のHello Worldプログラムをビルドできます。以下に手順を示します。
Hello Worldプログラム hello.c を作成します。前節と同じです。
CMakeLists.txt ファイルをhello.cと同じディレクトリに作成します。これはCMakeの設定ファイルで、プロジェクトの構成やビルド手順を記述します。以下は、簡単な例です。
cmake_minimum_required(VERSION 3.0)
project(HelloWorld C)
add_executable(hello hello.c)
CMakeを使ってビルドシステムを構成します。次のコマンドを実行します。
% cmake -G Ninja -B build
-- The C compiler identification is GNU 12.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/USERNAME3/ninja/prj01/build
ここで、-G NinjaはNinjaビルドを指定しています。-B buildはビルドディレクトリを指します。
Ninjaを使ってビルドを実行します。
% cmake --build build/
[2/2] Linking C executable hello
% build/hello 
Hello, World!
これにより、CMakeが生成したNinjaのビルドファイルを使って、hello.c をコンパイルし、hello という実行可能ファイルがビルドされます。
この手順では、CMakeを使用してNinjaビルドシステムを構成し、Hello Worldプログラムをビルドしています。CMakeを使うことで、プロジェクトの構成や依存関係を管理しやすくなります。
Mesonを使用してNinjaビルドシステムを構成することで、C言語のHello Worldプログラムをビルドできます。以下に手順を示します。
Hello Worldプログラム hello.c を作成します。前前節と同じです。
meson.build ファイルをmeson initで生成します。
% meson init
Using "prj01" (name of current directory) as project name.
Using "prj01" (project name) as name of executable to build.
Detected source files: hello.c
Detected language: c
Generated meson.build file:
project('prj01', 'c',
  version : '0.1',
  default_options : ['warning_level=3'])
executable('prj01',
           'hello.c',
           install : true)
Mesonを使ってビルドシステムを構成します。次のコマンドを実行します。
% mkdir build && cd build
% meson ..
The Meson build system
Version: 1.0.1
Source dir: /home/USERNAME3/ninja/prj01
Build dir: /home/USERNAME3/ninja/prj01/build
Build type: native build
Project name: prj01
Project version: 0.1
C compiler for the host machine: cc (gcc 12.2.0 "cc (Debian 12.2.0-14) 12.2.0")
C linker for the host machine: cc ld.bfd 2.40
Host machine cpu family: x86_64
Host machine cpu: x86_64
Build targets in project: 1
Found ninja-1.11.1 at /usr/bin/ninja
% meson compile
INFO: autodetecting backend as ninja
INFO: calculating backend command to run: /usr/bin/ninja
[2/2] Linking target prj01
% ./prj01
Hello, World!