総合開発環境 ビルドの動きとビルドとリビルドでエラーの違いが出る
ビルドとは
おおまかに言うと「ソースコードに問題(バグ)がないか解析を行い、問題がなければ実行できる形のファイルに変換し、組み立てること」
注)
開発環境によって少し内容に変化あり!
コンパイルとは
意味が似てる用語・コンパイルとは英語で翻訳という意味であり、ソースコードを人間が読んで分かりやすいプログラミング言語から機械が読んで分かりやすい機械語に翻訳を行うことを指します。
ビルドの作業の中に含まれる作業の1段階のこと。
ソースコードを翻訳しただけでは、複雑なプログラムは動かないため、必要な付帯ファイルのセットなどをビルドで行う必要。
・ビルドの仕組みと流れ
全体的な流れとしては、
大元のソースコード
⇩⇩⇩⇩
1.各ソースコードの席的解析を行う
⇩⇩⇩⇩
2.プリプロセッサで前処理を行う
⇩⇩⇩⇩
⇩⇩⇩⇩
4.各オブジェクトファイルとライブラリをリンクする
⇩⇩⇩⇩
実行ファイル
1.各ソースコードの静的解析を行う
この静的解析では、分法や構文の誤りを検出する、つまりバグを見つけるための処理が行われる。
バグがあった場合はここで処理がストップし、コンパイルには進まずバグの検出箇所をお知らせして終わる。
2.プリプロセッサで前処理を行う
ソースコードに誤りが見つからない場合、
前処理では、定数の数値への置き換えやコメントの削除、マクロの展開などが行われる。この前処理は、行う言語、行わない言語とある。
行う言語例👇
なお、逆に用いなくても問題ない言語であってもプリプロセッサを使用することは可能で、例えば、Javaでファイルサイズの圧縮などを目的にJava用プリプロセッサが使われることもある。
前処理が終わりましたら、コンパイルが行われる。
コンパイルとは英語で「翻訳」という意味であり、ここで書いたソースコードを機械が読んで分かりやすい言語で書かれたオブジェクトファイル(.oや.obj)などに変換する。
4.各オブジェクトファイルとライブラリをリンクする
コンパイルが終わったら、最後に「リンカ」で各オブジェクトファイルやライブラリのリンクが行われます。
全ての部品をリンクすることで、最終的に「実行ファイル」が完成する
ビルドとリビルドの違い
ビルド
前回のビルド以降に変更されたアイテムのみを対象にコンパイルを行う。
リビルド
全部のアイテムを対象にコンパイルを行うもの
こんなケース:
ソリューションにプロジェクトを付け加えた後、ソリューションをビルドすると、正常に終了して、リビルドすると呼び出しエラーが出ます。
考えられる理由:
追加したプロジェクトにはコンパイルエラーがないが、
既存のプロジェクトにはエラーが含まれている可能性。