VisualStudioプロジェクトのフォルダ構成に関する質問です。


 C++一年程度の初心者です。VisualC++を使って、空のプロジェクトからアプリケーションを作成しているのですが、その時生成されるプロジェクトのファイル構造が釈然としません。

 例えば空のプロジェクト[test_A]を作成し、その中に[Source.cpp]というファイルを作成、ビルドした場合、test_Aファイルの中には、Debug/Rereaseフォルダが各2つあります。その他にも重複する拡張子のファイルが見当たります。また、同じプロジェクト名のフォルダで階層が妙に深くなっているように感じて気持ちが悪いです。

 だからどうだと言うわけでもないのですが、できれば階層を1段浅くして、スッキリシンプルなファイル構造にしたいなと思い質問させていただきました。
 このファイル構造には理由があるのでしょうか…?それとも簡単に自分好みに変更できるのでしょうか…?どなたか解答をよろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/01/26 23:09:06
  • 終了:2014/01/28 17:16:26

ベストアンサー

id:cx20 No.1

cx20回答回数607ベストアンサー獲得回数1082014/01/27 06:40:21

同じプロジェクト名のフォルダ階層が妙に深くなっているという違和感を感じるのは分かる気がします。
階層が深くなっている理由としては、Visual Studio のプロジェクトの管理方法として

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

という2つのコンテナで管理していることに由来します。

  • ソリューションの階層を作成するケース(通常ケース)

f:id:cx20:20140127053332p:image
f:id:cx20:20140127053334p:image
f:id:cx20:20140127055251p:image
(※ 上記の画面イメージは、イメージが湧きやすいように、プロジェクト名とソリューション名を別のものにしています。)
一般的には、1ソリューションにつき、複数のプロジェクトが含まれることが多い為、上記のような階層が推奨されますが、シンプルなプロジェクトであれば、ソリューションの階層を作成しないという方法を取ることもできます。

その場合は、新しいプロジェクトを作成するときに「ソリューションのディレクトリを作成」のチェックを外すことで、フラットな階層のプロジェクトが作成可能です。

  • ソリューションの階層を作成しないケース(シンプルなプロジェクトのケース)

f:id:cx20:20140127053335p:image
f:id:cx20:20140127053337p:image
f:id:cx20:20140127053336p:image
ちなみに、余談ですが、Visual C++ 6.0 の時代は、*.dsp(プロジェクトファイル)と *.dsw(プロジェクトワークスペース、現在の、*.sln に相当)が、同一フォルダに作成されていました。
Visual Studio.NET 2002(VC++7.0) より、VC# や VB.NET と同様に、ソリューションエクスプローラの表示内容と同じフォルダ構成になるよう、方針が変わったようです。
恐らくは、仮想的な階層概念(ソリューションエクスプローラー)と物理的な階層構造(エクスプローラー)で同じ、階層構造をしていた方が、管理し易いという判断になったのではないかと思います。

<参考情報>
■ ソリューションとプロジェクトの基礎
http://msdn.microsoft.com/ja-jp/library/b142f8e7.aspx

■ コンテナーとしてのソリューション
http://msdn.microsoft.com/ja-jp/library/df8st53z.aspx

id:onigiriTurnA

丁寧な回答ありがとうございます!なるほど、最初にどんな階層にするかは簡単に選べるのですね!見落としていました。
また過去の経緯も含めて説明いただき、理解が深まりました!
ソリューションとプロジェクトという概念についても、これまで雰囲気しか分かっていなかったので、参考URLも非常にためになりました。

2014/01/28 17:16:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません