Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.3. ソースからのソフトウェア構築

このセクションでは、ソースコードからソフトウェアを構築する方法を説明します。

コンパイル言語で書かれたソフトウェアの場合、ソースコードはビルドプロセスを経て、マシンコードを生成します。このプロセスは、コンパイルまたはトランスレートと呼ばれ、言語によって異なります。その結果構築されるソフトウェアは実行できるようになります。これにより、プログラマーが指定したタスクをコンピューターが実行するようになります。

raw インタープリター言語で書かれたソフトウェアの場合、ソースコードは構築されず、直接実行します。

バイトコンパイル型のインタープリター言語で書かれたソフトウェアの場合、ソースコードがバイトコードにコンパイルされ、その言語の仮想マシンによって実行されます。

2.3.1. ネイティブにコンパイルされたコード

本セクションでは、C 言語で書かれた cello.c プログラムの実行可能なファイルへの構築方法を紹介します。

cello.c

#include <stdio.h>

int main(void) {
    printf("Hello World\n");
    return 0;
}

2.3.1.1. 手動による構築

cello.c プログラムを手動で構築する場合は、以下の手順を使用します。

手順

  1. GNU コンパイラーコレクション から C コンパイラーを起動し、ソースコードをバイナリーにコンパイルします。

    gcc -g -o cello cello.c
  2. 生成された出力バイナリー cello を実行します。

    $ ./cello
    Hello World

2.3.1.2. 自動化ビルド

大規模なソフトウェアは通常、Makefile ファイルを作成し、GNU make ユーティリティーを実行して自動ビルドを使用します。

自動ビルドを使用して cello.c プログラムを構築する場合は、以下の手順を使用します。

手順

  1. 自動ビルドを設定するには、次の内容の Makefile ファイルを cello.c と同じディレクトリーに作成します。

    makefile

    cello:
    	gcc -g -o cello cello.c
    clean:
    	rm cello

    cello: および clean: の行は、タブスペースで始まる必要があります。

  2. ソフトウェアを構築するには、make コマンドを実行します。

    $ make
    make: 'cello' is up to date.
  3. ビルドはすでに利用できるため、make clean コマンドを実行してから、make コマンドを再び実行します。

    $ make clean
    rm cello
    
    $ make
    gcc -g -o cello cello.c
    注記

    別のビルドに影響がなければ、プログラムの構築を試行します。

    $ make
    make: 'cello' is up to date.
  4. プログラムを実行します。

    $ ./cello
    Hello World

これで、ビルドツールを使用した手動によるプログラムのコンパイルが完了しました。

2.3.2. コードの解釈

本セクションでは、Python で書かれたプログラムをバイトコンパイルして、bash で書かれたプログラムをそのまま解釈する方法を示しています。

注記

以下の 2 つの例では、ファイルの一番上の #! 行は、シバン (shebang) と呼ばれるもので、プログラミング言語ソースコードの一部ではありません。

シバン により、実行ファイルとしてテキストファイルを使用できるようになります。システムプログラムローダーは、シバンを含む行を解析して、バイナリーの実行ファイルへのパスを取得します。これは、プログラミング言語インタープリターとして使用されます。この場合は、テキストファイルを実行ファイルとしてマークする必要があります。

2.3.2.1. コードのバイトコンパイル

本セクションでは、Python で書かれた pello.py プログラムをバイトコードにコンパイルし、Python 言語の仮想マシンで実行する方法を説明します。

Python のソースコードは、そのまま解釈することもできすが、バイトにコンパイルした方が高速です。したがって、RPM パッケージャーは、エンドユーザーが配布するバージョンにはバイトコンパイルのパッケージ化を推奨しています。

pello.py

#!/usr/bin/python3

print("Hello World")

プログラムのバイトコンパイル手順は、以下の要素によって異なります。

  • プログラミング言語
  • 言語の仮想マシン
  • その言語で使用するツールおよびプロセス
注記

Python は、多くの場合バイトコンパイルが行われますが、ここでは説明しません。以下の手順は、コミュニティーの標準に準拠するのではなく、簡潔さを重視しています。実際の Python ガイドラインは Software Packaging and Distribution を参照してください。

この手順に従って pello.py をバイトコードにコンパイルします。

手順

  1. pello.py ファイルをバイトコンパイルします。

    $ python -m compileall pello.py
    
    $ file pello.pyc
    pello.pyc: python 2.7 byte-compiled
  2. pello.pyc のバイトコードを実行します。

    $ python pello.pyc
    Hello World

2.3.2.2. raw-interpreting code

本セクションでは、bash シェルの組み込み言語で書かれた bello プログラムをそのまま解釈する方法を示しています。

bello

#!/bin/bash

printf "Hello World\n"

bashなどのシェルスクリプト言語で書かれたプログラムはそのまま解釈されます。

手順

  • ソースコードの実行ファイルでファイルを作成して実行します。

    $ chmod +x bello
    $ ./bello
    Hello World