VC++の使い方

VC++の使い方 > チュートリアル > VC++入門 > アクティブプロジェクトと構成
このページの内容
このページの内容
アクティブプロジェクトとは
アクティブプロジェクトの設定方法
構成とは?
最初からある2つの構成
helloworldを2通りにビルドしてみよう
Release と Debug の明らかな違い
ありがたいスポンサー様
All About ソフトウエアエンジニア
ネットで8%割引!自動車保険はアメリカンホーム・ダイレクト
人生の「チャンス」と「ピンチ」にモビット!
保険料が一生上がらない、保険料最大50%割引の一生涯の医療保険!

このページの内容

『アクティブプロジェクト』 と 『構成』 という概念について説明します。例によって、一番最初にまとめを書いちゃいます。まとめを見て分かる人は、以下の説明を読まなくてよいってことで。

アクティブプロジェクト
ビルドするプロジェクトをアクティブプロジェクトに設定する
構成
ビルドの方法を記述した設定。1つのプロジェクトに複数の構成があるのが普通

アクティブプロジェクトとは

プロジェクトって何!?では、プロジェクトのビルド方法についても軽く解説しました。ビルドとは、プロジェクトから実行ファイルを作成することでしたね。

しかし、現在、ワークスペースには 『helloworld』 と 『test』 という2つのプロジェクトがあります。このときにVC++からビルドを実行すると、VC++はどちらのプロジェクトをビルドしたらよいのか迷ってしまいます。


ここで出てくるのが 『アクティブプロジェクト』 という概念です。『ビルド』 を実行すると、VC++はアクティブプロジェクトをビルドしようとします。つまり、アクティブプロジェクトを設定することで、どのプロジェクトをビルドしたいかを VC++ に教えてやることができます。そのためアクティブプロジェクトは、ワークスペースの中に1つだけです。1つのプロジェクトしかない場合は、そのプロジェクトが常にアクティブに設定されています。

アクティブプロジェクトは 『FileView』 において太字で記されています。例えば、下の図の場合だと 『test』 プロジェクトがアクティブプロジェクトに設定されています。

2つのプロジェクト
2つのプロジェクト

アクティブプロジェクトの設定方法

ここからは実際に、アクティブプロジェクトを変更する方法を説明していきます。まず、1つ目の方法はメニューの『プロジェクト→アクティブプロジェクトに設定』から、アクティブにしたいプロジェクトを選択する方法です。

メニューからアクティブプロジェクトを設定する方法
メニューからアクティブプロジェクトを設定する方法

今回の例の場合だと 『helloworld』 と 『test』 という2つのプロジェクトがあるので、このうちどちらをアクティブにするかを選択できるわけです。


また、『FileView』 から変更する方法もあります。アクティブにしたいプロジェクト上で右クリックして、『アクティブプロジェクトに設定』をクリックします。

FileViewからアクティブプロジェクトを設定する方法
FileViewからアクティブプロジェクトを設定する方法


最後に、筆者が一番良くやる方法を紹介します。これは、メニューの『ビルド→アクティブな構成の設定』を選択する方法です。

アクティブな構成の設定
アクティブな構成の設定

またまた 『構成』 という新しい言葉が出てきちゃいました。では、構成について解説してみたいと思います。

構成とは?

構成って言われてもピンと来ないですよね。構成は configuration の日本語訳です。configuration とは、コンピュータ用語で 『構成、定義、環境設定』 などを表します。だから、次のように読み替えた方が分かりやすいかもしれませんね。

『プロジェクトの構成』→『プロジェクトの設定』『アクティブな構成の設定』→『アクティブな設定の変更』

余談になりますが、構成というのは誤訳な気がするんですがどうでしょうか。間違ってはないけれども、この訳のせいで初心者はよりいっそう取っつきにくく思えてしまう気がします。


では、構成とは何の設定なんでしょうか。それは、ビルドの方法です。同じビルドするにしても、何通りもの方法が考えられます。何を最優先してコンパイルするか(実行時間やファイルサイズ、デバッグ効率など)、どのようなライブラリをリンクするかなどです。その他にも、VC++ は多数のオプションを用意しています。なんせ、プロの需要に応えるぐらいのアプリケーションですから、設定項目は多岐にわたります。

このようなオプションをいちいち設定するのは大変なので、VC++には 『Win32 Release』 と 『Win32 Debug』 という2つの 『構成』 が初めから用意されています。通常は、この2つの構成を使い分けるだけで十分でしょう。

最初からある2つの構成

『Win32 Release』 はリリース…つまり出荷・配布するときに使うのが普通です。この構成でビルドすると、コンパイルやリンクのときに最適化が行われます。デフォルトでは実行速度が優先されますが、メニューの 『プロジェクト→設定』 で変更可能です。また、NDEBUGが定義されます。

『Win32 Debug』 はデバッグするときに使います。そのため、実行ファイルにデバッグ情報が含まれます。この情報は、Visual C++ のデバッガや、Microsoft のデバッグ形式に対応したデバッガで使用可能です。また、最適化したコードはデバッグしにくいので、『Win32 Debug』 の場合は最適化されないため、ファイルサイズが大きくなってしまいます。また、_DEBUGが定義されます。


それでは、_DEBUGをうまく使う例を一つ紹介します。この方法は非常によく使う方法です(Microsoft のランタイム ライブラリでも使用されています)。まずは、以下のコードをご覧ください。

#ifdef _DEBUG
// デバッグに必要な情報を出力するコード
#endif

こうすることによって、『Win32 Debug』 のときだけにデバッグに必要な情報を出力することができます。_DEBUGが定義されている場合のみ、#ifdefと#endifで囲まれた部分がコンパイルされますからです。よく分からない人は、#ifdefの意味を復習してくださいね。

これは、『Win32 Debug』 のときだけデバッグに必要な情報を出力して、『Win32 Release』 でビルドしたときは出力されないと言うことを意味します。このようにして、ソースコードをいじることなく、『構成』を変更するだけでプログラムの挙動を変更できるわけです。

helloworldを2通りにビルドしてみよう

さて、Debug と Release の2つがあることが分かったので、この前に作った helloworld プロジェクトを、それぞれの方法でビルドしてみましょう。前回までの途中経過はここからDLしてください。DLできたら、『ファイル > ワークスペースを開く』 から c:\myprogram\helloworld にある helloworld.dsw を開いてください。

では、早速、メニューの『ビルド→アクティブな構成の設定』から 『helloworld - Win32Release』を選択してから、メニューの『ビルド→ビルド』を選択してビルドしてください。

------------構成: helloworld - Win32 Release------------
リソースをコンパイル中...
コンパイル中...
StdAfx.cpp
コンパイル中...
helloworld.cpp
リンク中...
helloworld.exe - エラー 0、警告 0

上のように出力されれば完了です。メニューの 『ビルド→実行 helloworld.exe』 を選択するか、Ctrl+F5 を押して実行してみてください。

Win32 Releaseのhelloworld.exe
Win32 Releaseのhelloworld.exe


次に、メニューの『ビルド→アクティブな構成の設定』から 『helloworld - Win32Debug』を選択してから、メニューの『ビルド→ビルド』を選択してビルドしてください。

------------構成: helloworld - Win32 Debug------------
リソースをコンパイル中...
コンパイル中...
StdAfx.cpp
コンパイル中...
helloworld.cpp
リンク中...
helloworld.exe - エラー 0、警告 0

上のように出力されるはずです。Win32 Release のときとほとんど変わりませんね。違うのは最初の一行だけです。先ほどと同様に、メニューの 『ビルド→実行 helloworld.exe』 を選択するか、Ctrl+F5 を押して実行してみてください。実行されるアプリケーションも、一見、違いがないように見えますね。では、どこが違うのでしょうか。

Release と Debug の明らかな違い

ワークスペースのあるフォルダを開いてみてください。このフォルダに、新規に『Release』 フォルダと 『Debug』 フォルダが作成されていると思います。これらのフォルダの中に、それぞれの構成で作成した中間ファイルや出力ファイルが含まれています。

Release と Debug のサイズの違い
Release と Debug のサイズの違い

どうですか。両者を比べてみると、ファイルサイズの違いがが一目瞭然ですね。Debug では、実行ファイルなどにデバッグ情報が含まれるため、ファイルサイズが大きくなっています。それに比べ、Release では最適化が施されるため、ファイルサイズも小さめになっていますね。


ビルドするときは全部 Release でやる方がディスクスペースの節約になってよいかというと、そうでもありません。Release でビルドすると、VC++のデバッガやデバッグを補助する関数などを利用することができません。VC++のデバッガが不要という方は、Release のみを使用するのもよい選択かもしれません。