リブlab

理系大学生のIT・電気・大学・趣味についての日記

Visual Studioの使い方 画面を説明するよ 3~ ビルド ~

 こんにちは、リブです。
今回はビルドの説明をしていきます。
ですが、その前にソリューションやプロジェクトなどの概念を明確にしておきましょう。
 説明部分が長く難しいことも書いているので使い方を手早く知りたい方は[ビルド]の使い方までスクロールしてください。

ソリューションとプロジェクトとは  

  

 Visual Studio でアプリ、webサイト、プラグインなどを作成するときは、プロジェクトから始めますよね。  

 たとえば、あなたが何かを作ろうとします。  

[ファイル]>[新規作成]  

と、ボタンを押しますよね。では、次に出てくるのは何でしょうか。実際に確認してみてください。  

  [プロジェクト]と[ファイル]が出てきましたよね。僕の一番最初の「デスクトップアプリを作ってみた」って記事を見ると、確かにプロジェクトからアプリを作ったのが分かりますよね。  

  

hajimekata-nyumon-donyu.hatenablog.com  

  

 はい、このようにVisual studioで何かを作る時はプロジェクトからスタートします。


プロジェクトとは

プロジェクトについて具体的に書くと

プロジェクトには、コンパイルを実行するのに必要な「ソースコードファイル、
アイコン、イメージ、およびその他の要素」が含まれる。  

プロジェクトには、プログラムが通信する種々のサービスやコンポーネントで
必要になる可能性がある全てのコンパイラ設定とその他の構成ファイルも含まれる。  



 このような中身を持つものをプロジェクトと言うんですね。

簡単に説明すると録音アプリを作っていると仮定すると、録音のための処理を記述したコードとアプリのアイコンが含まれるってことです。



ソリューションとは


 ソリューションはプロジェクトを格納するものです。

 ソリューションについてより詳しく書くと
ソリューションには1つ以上のプロジェクトがあり、「ビルド情報、ウィンドウの設定、およびどのプロジェクトにも関連づけられていないファイル」が含まれます。

 ソリューションには、プロジェクトで作業している各ユーザーの設定、ユーザー設定、および構成情報を格納する.suoファイルと呼ばれるファイルが関連づけられています。

solutionProjectRelation

solutionProjectRelation
(なぜかエクスポート時に画像が汚くなりました。怪奇現象怖い。)


ビルドとは ビルドでなにができるのか

 では、本日の本題に入りたいと思います。


ビルドとは

 ビルドとは以下の図の流れで表される仕組みです。

compiler
compiler
linker
linker



 このように、visual studioではプロジェクトを開けてソースコードを作成し、ビルドをすることでプログラムを機械が実行可能な形に変更するのです。

 機械が実行な形に変更するってどういうこと?なんで?と思う人のために簡単な解説を挟みます。

解説

 機械は命令されて動きます。その命令は数字の羅列で表されます。しかし、人にとって読みにくいので今の時代のようにC言語Pythonでコードを書くようになりましたとさ。(その間のことやアセンブリ言語は今回省く)

そのコードは機械が理解できないから機械が理解できるようにコンパイルする。これが機械が実行な形に変更するということ。



では、図にある静的解析やプリプロセッサについて解説します。

静的解析

ソースコードのsyntax error(文法ミス)を見つける。つまりバグ探し

プリプロセッサ

ソースコードにヘッダやソースファイルを取り込み
ソースコードに書かれたマクロの書き換え
コンパイル対象の選定
・処理系ごとの動作指定

コンパイラ

機械語に翻訳する

リンカ

 オブジェクトファイルのコードセクション、データセクションを連結し、定義されているシンボルと参照を接続し、ライブラリから未解決シンボルを抽出し、実行ファイルを書き出す

 巨大な開発をする時は、よく複数のプログラムに分けて開発します。 その場合、一つのプログラムを修正したからといって、全てを再コンパイルするのは効率が悪い。 ソース毎にコンパイルしてオブジェクトファイルを取得し、それらをリンクするのが効率的。だからリンクします。




とにかくビルドは機械が実行できるようにするんだと覚えてください。

[ビルド]の使い方

build
build
 

ビルド リビルド クリーン の区別

ビルド=変更が行われた部分だけビルドする

・「ビルド」は「依存関係のあるファイル間のタイムスタンプの比較」によってビルドアクション(=コンパイルなど)の要不要を判断しています。
必ずしも「ファイルの変更」を検出しているわけではないです。

なので、なんらかの理由によって依存関係のあるファイルのタイムスタンプが逆転してしまうと、ビルドが正常に行われなくなります。


リビルド=変更に関わらず、全てをビルドする

クリーン=過去のビルドによる生成物を全て消去する(次にビルドをしてもリビルドしても変わりない状態にする)


プログラムデータベースファイルpdb)= デバッグとプロジェクト状態情報を保持しています

 これを構築するのが完全なプログラムデータベースファイルを構築するコマンドなんですが、気を付けることがあります。

 もしもVisual Studioのデフォルトの場所(マイドキュメント)でプロジェクトを作ると、PCのユーザー名が漏洩する可能性があります。 Debugビルドではこのファイルを元にブレークポイントがかけられるので、Debug時は有効なのですがRelease時には要りません。


コード分析=識別子の大文字と小文字を区別がされているかなどの「コーディングルール」をチェックしてくれます。カスタムもできるのでチームでカスタムすることもあるそうな。



 [パッチビルド]や[構成マネージャー]についてはクリックすれば分かると思いますので今回はここまでです。
お疲れさまでした。



終わりに

 すみません、今回は記事の構成を間違えてしまって最初に技術的なことをふんだんに書いてしまいました。
次回からは以前通り最初に簡潔に述べてから具体的に書いていきたいと思います。(多分)