2.3. ソースからのソフトウェアのビルド
ソフトウェア構築プロセス中に、ソースコードは、RPM を使用してパッケージ化できるソフトウェアアーティファクトに変換されます。
2.3.1. ネイティブにコンパイルされたコードからのソフトウェアのビルド リンクのコピーリンクがクリップボードにコピーされました!
次のいずれかの方法を使用して、コンパイル言語で書かれたソフトウェアを実行可能ファイルにビルドできます。
- 手動ビルド
- 自動ビルド
2.3.1.1. サンプル C プログラムを手動ビルド リンクのコピーリンクがクリップボードにコピーされました!
手動ビルドを使用して、コンパイル言語で書かれたソフトウェアをビルドできます。
C で書かれたサンプルの Hello World
プログラム (cello.c
) には次の内容が含まれています。
手順
GNU コンパイラーコレクションから C コンパイラーを呼び出して、ソースコードをバイナリーにコンパイルします。
gcc -g -o cello cello.c
$ gcc -g -o cello cello.c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成されたバイナリー
cello
を実行します。./cello
$ ./cello Hello World
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.1.2. サンプル C プログラムの自動ビルドの設定 リンクのコピーリンクがクリップボードにコピーされました!
大規模なソフトウェアでは、自動ビルドが一般的に使用されます。Makefile
ファイルを作成し、GNU make
ユーティリティーを実行することで、自動ビルドをセットアップできます。
手順
次の内容を含む
Makefile
ファイルをcello.c
と同じディレクトリーに作成します。cello: gcc -g -o cello cello.c clean: rm cello
cello: gcc -g -o cello cello.c clean: rm cello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cello:
とclean:
の下の行は、行頭にタブ文字 (タブ) を追加する必要があることに注意してください。ソフトウェアをビルドします。
make
$ make make: 'cello' is up to date.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ビルドが現在のディレクトリーですでに利用可能であるため、
make clean
コマンドを入力してから、make
コマンドを再度入力します。make clean make
$ make clean rm cello $ make gcc -g -o cello cello.c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow GNU
make
システムが既存のバイナリーを検出するため、この時点でプログラムを再度ビルドしても効果がないことに注意してください。make
$ make make: 'cello' is up to date.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プログラムを実行します。
./cello
$ ./cello Hello World
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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")
print("Hello World")
手順
pello.py
ファイルをバイトコンパイルします。python -m compileall pello.py
$ python -m compileall pello.py
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルのバイトコンパイルされたバージョンが作成されたことを確認します。
ls __pycache__
$ ls __pycache__ pello.cpython-311.pyc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力内のパッケージのバージョンは、インストールされている Python のバージョンによって異なる場合があることに注意してください。
pello.py
でプログラムを実行します。python pello.py
$ python pello.py Hello World
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.2.2. サンプル Bash プログラムの直接解釈 リンクのコピーリンクがクリップボードにコピーされました!
Bash シェルの組み込み言語で書かれたサンプルの Hello World
プログラム (bello
) には、次の内容が含まれています。
#!/bin/bash printf "Hello World\n"
#!/bin/bash
printf "Hello World\n"
bello
ファイルの先頭にある シバン (#!
) 記号は、プログラミング言語のソースコードの一部ではありません。
シバン を使用して、テキストファイルを実行可能ファイルに変換します。システムのプログラムローダーが、シバン を含む行を解析してバイナリー実行可能ファイルへのパスを取得し、それがプログラミング言語インタープリターとして使用されます。
手順
ソースコードを含むファイルを実行可能ファイルにします。
chmod +x bello
$ chmod +x bello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成したファイルを実行します。
./bello
$ ./bello Hello World
Copy to Clipboard Copied! Toggle word wrap Toggle overflow