2.3. ソースからのソフトウェアのビルド
ソフトウェア構築プロセス中に、ソースコードは、RPM を使用してパッケージ化できるソフトウェアアーティファクトに変換されます。
2.3.1. ネイティブにコンパイルされたコードからのソフトウェアのビルド
次のいずれかの方法を使用して、コンパイル言語で書かれたソフトウェアを実行可能ファイルにビルドできます。
- 手動ビルド
- 自動ビルド
2.3.1.1. サンプル C プログラムを手動ビルド
手動ビルドを使用して、コンパイル言語で書かれたソフトウェアをビルドできます。
C で書かれたサンプルの Hello World
プログラム (cello.c
) には次の内容が含まれています。
#include <stdio.h> int main(void) { printf("Hello World\n"); return 0; }
手順
GNU コンパイラーコレクション から C コンパイラーを起動し、ソースコードをバイナリーにコンパイルします。
$ gcc -g -o cello cello.c
作成されたバイナリー
cello
を実行します。$ ./cello Hello World
2.3.1.2. サンプル C プログラムの自動ビルドの設定
大規模なソフトウェアでは、自動ビルドが一般的に使用されます。Makefile
ファイルを作成し、GNU make
ユーティリティーを実行することで、自動ビルドを設定できます。
手順
次の内容を含む
Makefile
ファイルをcello.c
と同じディレクトリーに作成します。cello: gcc -g -o cello cello.c clean: rm cello
cello:
とclean:
の下の行は、行頭にタブ文字 (タブ) を追加する必要があることに注意してください。ソフトウェアをビルドします。
$ make make: 'cello' is up to date.
ビルドが現在のディレクトリーですでに利用可能であるため、
make clean
コマンドを入力してから、make
コマンドを再度入力します。$ make clean rm cello $ make gcc -g -o cello cello.c
GNU
make
システムが既存のバイナリーを検出するため、この時点でプログラムを再度ビルドしても効果がないことに注意してください。$ make make: 'cello' is up to date.
プログラムを実行します。
$ ./cello Hello World
2.3.2. ソースコードの解釈
次のいずれかの方法を使用して、インタープリター型プログラミング言語で記述されたソースコードをマシンコードに変換できます。
バイトコンパイル
ソフトウェアのバイトコンパイル手順は、次の要素によって異なります。
- プログラミング言語
- 言語の仮想マシン
その言語で使用するツールおよびプロセス
注記たとえば Python で書かれたソフトウェアをバイトコンパイルできます。配布を目的とした Python ソフトウェアは多くの場合バイトコンパイルされますが、このドキュメントで説明されている方法では行われません。説明されている手順は、コミュニティー標準に準拠することではなく、簡素化することを目的としたものです。実際の Python ガイドラインは Software Packaging and Distribution を参照してください。
Python ソースコードは、そのまま解釈することもできます。ただし、バイトコンパイルされたバージョンの方が高速です。したがって、RPM パッケージの作成者は、エンドユーザーに配布するために、バイトコンパイルされたバージョンをパッケージ化する傾向があります。
直接解釈
Bash などのシェルスクリプト言語で書かれたソフトウェアは、常に直接解釈によって実行されます。
2.3.2.1. サンプル Python プログラムのバイトコンパイル
Python ソースコードの直接解釈ではなくバイトコンパイルを選択すると、より高速なソフトウェアを作成できます。
Python プログラミング言語で書かれたサンプルの Hello World
プログラム (pello.py
) には、次の内容が含まれています。
print("Hello World")
手順
pello.py
ファイルをバイトコンパイルします。$ python -m compileall pello.py
ファイルのバイトコンパイルされたバージョンが作成されたことを確認します。
$ ls __pycache__ pello.cpython-311.pyc
出力内のパッケージのバージョンは、インストールされている Python のバージョンによって異なる場合があることに注意してください。
pello.py
でプログラムを実行します。$ python pello.py Hello World
2.3.2.2. サンプル Bash プログラムの直接解釈
Bash シェルの組み込み言語で書かれたサンプルの Hello World
プログラム (bello
) には、次の内容が含まれています。
#!/bin/bash printf "Hello World\n"
bello
ファイルの先頭にある シバン (#!
) 記号は、プログラミング言語のソースコードの一部ではありません。
シバン を使用して、テキストファイルを実行可能ファイルに変換します。システムのプログラムローダーが、シバン を含む行を解析してバイナリー実行可能ファイルへのパスを取得し、それがプログラミング言語インタープリターとして使用されます。
手順
ソースコードを含むファイルを実行可能ファイルにします。
$ chmod +x bello
作成したファイルを実行します。
$ ./bello Hello World