yn2011's blog

技術メモ

C言語のビルドプロセスから理解する"./configure", "make" ,"make install"

Kakasiのインストールをしていて、 そういえば./configure, make ,make installって何しているのかちゃんと分かってないなあと思ったので調べたことをまとめた。
C言語本格入門 ~基礎知識からコンピュータの本質までを参考にさせて頂きました。

前提知識

  • ./configure, make ,make installを理解するには、C言語ソースコードが実行ファイルになるまでの流れを知っておく必要があると思う

C言語ソースコードはそのままでは実行できない

  • 下の図はC言語ソースコードが実行ファイルになるまでの流れを示している
  • 実行するには実行ファイルを作成する必要がある

f:id:pokuwagata:20181109000229p:plain [種田元樹 (2018) . C言語本格入門 ~基礎知識からコンピュータの本質まで 技術評論社 図1-7より引用]

ビルドとは何か

C言語の移植性

Cランタイムとlibc

  • C言語ソースコードを実行する環境の差異を吸収する
  • CランタイムはC言語で書かれたプログラムを実行するための情報を持つファイル
  • libcはC言語で書かれたプログラムを実行するためのライブラリ
  • 実行ファイル=機械語のファイル+Cランタイム+libc

Q&A

Q. ./configure すると何が起こるのか?

  • 実行環境の情報を元にMakefileを作成する
    • Makefileはmakeコマンドによるソースコードのビルドを自動化するための設定ファイル
    • ビルドは色々設定が必要なので設定ファイルがあると毎回書かずに済む
      • リンクするオブジェクトファイル名 (複数)
      • コンパイルオプション
      • リンカオプション
      • etc

Q. なぜ ./configure する必要があるのか?

  • C言語の移植性はCランタイムやlibcによって担保されているから

Q. make すると何が起こるのか?

Q. なぜmakeする必要があるのか?

  • ソースコードの実行ファイルを生成しないとプログラムを実行できないから

Q. make install すると何が起こるのか?

  • makeで生成された実行ファイルをインストールする (指定のディレクトリにコピー)

Q. なぜmake installする必要があるのか?

  • 対象の実行ファイルを呼び出しやすくするため

参考