brand new note

ジャズお兄さんの技術メモ

コンパイルとビルドの違い

そういえばずーっと分からないままだったのでメモ。

コンパイル

Cを始めとする高水準言語は、コードを書いて実行する時コンピュータが理解しやすい機械語(アセンブリ言語)にまず翻訳されます。この翻訳をコンパイルといい、翻訳ソフトウェアのことをコンパイラと呼びます。機械語に変換された後はアセンブラによって0と1のビット列に変換されます。ここではじめてCPUが処理できる形になります。

これは授業やちょっとしたプログラミングの練習に毎回出てくるので理解はしていました。ただ授業中にマニュアルに沿ってvisual studioをいじっていても、コンパイルとビルドの違いに関しては全然理解していませんでした。

で、この理解不足は「一つのアプリケーションが一つのソースファイルで動いている状態」という、いわばプログラミング学習の初期段階から先に行けなかったことが原因だったのだ、と最近判明しました。

ビルド

ビルドに関してはもう少し実際のアプリケーションの構成を目で見ないとイメージしにくいかもしれません。少し前まで、他人のgithubとかを見て「なんでひとつのアプリケーションは複数のファイルで構成されているんだろう、readmeとかよくあるし、どうやって連動して動作しているんだろう」と思っていました。自分はそこまで書けないので。

こんな感じで、OSS等のパッケージは自分の作ったソースファイルだけで構成されているわけではありません。多くの場合、ソフトの使い方を書いたドキュメントや、動作に必要なデータファイルも含まれます。

このようなパッケージを、コンパイルも含め実際に使える、利用可能な状態に持っていくことの総称をビルドというようです。
はー納得。色んな本読むとスッキリしますね。


追記

コンパイルの詳細について続報を出しました。

僕はどれだけコンパイルのことを知っているのだろう - brand new note