Visual Studio 2010 CTPのVisual C++ とMSBuild

Visual Studio 2010 CTPではVisual C++のビルドシステムが変更され、いよいよMSBuildベースのシステムが導入されました。これまでのVCBuildはMSBuildに置き換えられるわけですが、VCBuildベースの既存プロジェクトもMSBuild形式に変換することによってVisual Studio 2010に移行することができます。MSBuild形式のプロジェクトファイルは拡張子がこれまでの".vcproj"から".vcxproj"に変更されています。

MSBuildの利点はマイクロソフトが多言語をターゲットに標準化を推進している技術ですので、.NET Frameworkを利用するVisual C#やVisual Basicとの統合が簡単に行えるところにあります。これらのマネージ言語は以前からMSBuild形式を採用していましたが、今回やっとVisual C++も仲間入りすることとなりました。

Visual Studio 2010 CTPで、MSBuildベースの新しいプロジェクトシステムをお試しいただく方法は、これまでに何度かご紹介したウォークスルーに掲載されていますので、ご覧ください。ただ、Visual Studio 2010 CTPは既定では古いプロジェクトシステムを使用するようになっていますので、例えば新規のMFCアプリケーションプロジェクトを作成しても目新しいところはありません。次の手順で新システムを有効にすることができます。

1. Visual Studioを終了する

2. Visual Studio 2010 Command Promptを開く

3. 次のコマンドを実行する: cd “C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE”

4. 次のコマンドを実行する: NewVcProjectSystem.cmd

Visual C++の他の新機能をお試しになる場合には、まだ新しいプロジェクトシステムは不安定かも知れませんので、その際には以下の手順で規定の設定に戻すことができます。

1. 上記の1から3までを実行する

2. 次のコマンドを実行する: OldVcProjectSystem.cmd

さて、新システムを有効にした状態で新規のMFCアプリケーションプロジェクトを作成してみましょう。

プロジェクトのフォルダ内に作成されたファイルを見ると、(プロジェクト名).vcxprojが作成されていると思います。

vcxprojファイルはvcprojファイルと同様にXMLファイルですのでメモ帳などで中身をのぞくことができます。1行目はこのようになっています。

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

作成したMFCアプリケーションのプロジェクトファイルはMSBuildのプロジェクトファイルに準拠したものであることが分かります。

vcxprojプロジェクトファイルはそれほど大きくはありませんが、要所で外部ファイルのインポートを行っています。既定の属性やターゲット(ビルドにおける手順)はこれらの外部ファイルから読み込まれ、プロジェクト毎のvcxprojファイルには主に変更点が記述されるという仕組みです。

インポート例:

  <Import Project="$(VCTargetsPath)\Microsoft.CPP.Default.settings" />

  <Import Project="$(VCTargetsPath)\Microsoft.CPP.targets" />

これらのファイルの実体は"C:\Program Files\MSBuild\Microsoft.Cpp\v4.0"フォルダにあるのですが、ここにはMSBuildがVisual C++をサポートするための規定の設定とターゲット定義が集約されています。また、Platformサブフォルダには環境依存性のあるファイルが存在していて、コンパイルやリンクといったターゲットはここで定義されています。

今回はVisual Studio 2010 CTPにおけるVisual C++とMSBuildの関係についてお届けしました。いよいよC++開発者にとってもMSBuildの重要性が増して来ると想像されます。今回はMSBuild自体の機能には触れませんでしたが、既存のビルドシステムと概念的に大きく異なる部分も多いので、興味のある皆様はこちらのMSDNサイト*を一読されることをお勧めします。

* Microsoft Visual Studio 2008/.NET Framework 3.5に関するトピックです。Visual Studio 2010 CTPと異なる可能性があります。