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
プログラムを手動で構築する場合は、以下の手順を使用します。
手順
GNU コンパイラーコレクション から C コンパイラーを起動し、ソースコードをバイナリーにコンパイルします。
gcc -g -o cello cello.c
生成された出力バイナリー
cello
を実行します。$ ./cello Hello World
2.3.1.2. 自動化ビルド
大規模なソフトウェアは通常、Makefile
ファイルを作成し、GNU make
ユーティリティーを実行して自動ビルドを使用します。
自動ビルドを使用して cello.c
プログラムを構築する場合は、以下の手順を使用します。
手順
自動ビルドを設定するには、次の内容の
Makefile
ファイルをcello.c
と同じディレクトリーに作成します。makefile
cello: gcc -g -o cello cello.c clean: rm cello
cello:
およびclean:
の行は、タブスペースで始まる必要があります。ソフトウェアを構築するには、
make
コマンドを実行します。$ make make: 'cello' is up to date.
ビルドはすでに利用できるため、
make clean
コマンドを実行してから、make
コマンドを再び実行します。$ make clean rm cello $ make gcc -g -o cello cello.c
注記別のビルドに影響がなければ、プログラムの構築を試行します。
$ make make: 'cello' is up to date.
プログラムを実行します。
$ ./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
をバイトコードにコンパイルします。
手順
pello.py
ファイルをバイトコンパイルします。$ python -m compileall pello.py $ file pello.pyc pello.pyc: python 2.7 byte-compiled
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