« VS 2010とXNA 4.0 CTP | メイン | MSとのつきあい方について。 »

2010/05/04

VC++ 2010の追加ディレクトリ

VC 2008までは、「ツール」→「オプション」→「プロジェクトおよびソリューション」→「VC++ディレクトリ」で設定できていた、アレです。全プロジェクトというかコンパイラやリンカに対するグローバルな「追加のインクルード ディレクトリ」や「追加のライブラリ ディレクトリ」などのことです。

VC 2010では、このグローバル追加ディレクトリの編集をIDEから行なうことができなくなっています。なんという仕様変更。ベータの頃にチェックしてMS Connect宛に嘆願書を書いておけば良かったorz

 

以前と似たようなUIによる設定機能は、「プロジェクト」→「<プロジェクト名>のプロパティ」→「構成プロパティ」→「VC++ディレクトリ」に移動しています。でも、これはあくまでプロジェクト ファイル(.vcxproj)ごとの設定になってしまうので、結局「C/C++」→「全般」→「追加のインクルード ディレクトリ」や「リンカー」→「全般」→「追加のライブラリ ディレクトリ」で設定した場合と同じ意味しか持たないと思います。

以前のようにグローバル設定したい場合は、直接ユーザー プロパティ シートなるXMLファイルをいじる必要があります。具体的には、UTF-8対応のテキストエディタを使って、下記のファイルの<IncludePath>タグと<LibraryPath>タグに(セミコロン区切りで)パスを設定する必要があります(VS 2008がインスコされている環境にVS 2010をインスコすると、設定を引き継いでくれますが、以後は自分で更新する必要があります)。

 

・Win32(x86)用

%LocalAppData%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props

 

サンプル

 

・Win64(x64)用

%LocalAppData%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props

 

サンプル

 

Windows VistaやWindows 7の場合、検索機能がやたら強力になっているので、エクスプローラーの右上にある検索ボックスから、

".user.props"でAppDataフォルダ以下を検索すればすぐに見つかります(ただしAppDataフォルダは例のごとく隠しフォルダになっているので、エクスプローラーの設定で表示できるようにしておくこと)。

なお、%LocalAppData%環境変数はWindows Vista以降に追加されたものなので、Windows XPの場合は下記になります。XPには%AppData%環境変数は存在するけど、%LocalAppData%とは別物なんですよね……まぎらわしいな……

%UserProfile%\Local Settings\Application Data\Microsoft\MSBuild\v4.0\

 

ただ、僕はもうXPを(自宅で)プログラム開発環境として使うことはないと思います。古い自作ツールをメンテナンスする際の互換性確認など、動作確認に使う可能性はありますが、今後はDirect3D 10.1、Direct3D 11、Direct2D、そしてマルチタッチを使ったアプリをメインで開発したいので、XPは主にグラフィック作成用OS、あるいはVistaに対応していない古いゲーム専用OSとしての用途しか残ってないかな……

XPはOS自体のメモリ使用量がVista/7に比べて小さめなので、グラフィックソフトが割とゆったり使えるんですよね。64bit OSにして実装メモリさえ増やしてしまえば、どのWindowsでもOKかもしれませんが。

仕事では相変わらず開発にXPを使わざるを得ない、というのが辛いところです。

 

本題に戻ります。DirectX SDKとかは、インストール時にグローバル追加ディレクトリを自動設定してくれていたのですが、VC 2010の場合はIDE側の仕様変更により設定してくれません。まぁDX SDK Feb 2010のリリースノートでは、VC 2010に正式に対応しているとは言及していないんですけどね。次のリリースでは対応してくれるとは思いますが。

※2010/06/13追記:

DX SDK June 2010でも、VS 2010に対しては、インストール時に自動設定してはくれませんでした。なので、相変わらず手動設定する必要があります。

(っていうかJune 2010のインストール ウィザードのテキスト、文字化けしすぎじゃね? MS Japanは絶対テストしてない。DX SDKの公式ページもen-usと比べて更新遅いし、どんだけサボってんだよ……日本のゲームメーカーも、もっと最新のSDKを積極的に使って開発すればいいのに……)

 

実は<D3D10_1.h>とか<d2d1.h>とかは、Windows SDKにも含まれているんですが、たいてい最新のDX SDKに含まれているヘッダのほうが新しいので、このプロパティ シート(.user.props)でDX SDKのインクルード パスを設定する際には、最初のほうに記述することで優先度を上げます。

 

さて……C++/CLIのインテリセンスが完全に効かなくなっているのはベータの頃から知っていたけど、これはかなり痛くないですか? まさかMSはC++/CLIを(J++やJ#のように)無かったことにしようとか考えているのでは……

次のリリース(多分サービスパック?)では本気出す(改善する)、とかアナウンスしているみたいですが……最初から本気出してくれorz

 

※2010/05/05追記:

ここで「プロパティ マネージャー」を使用したWindowsログイン ユーザーごとのグローバル追加ディレクトリ設定とか、詳しいことが紹介されていました。MSDNにも一応説明があります。なので、以下で説明している、ファイル直接編集による方法でなくてもいいみたいです。やっていることは結局一緒なんですけどね。なので、お好きなほうをどうぞ(ただプロパティ マネージャーを使う場合はIDEに何らかのVC++プロジェクト ファイルを読み込ませた状態でないとダメらしいです)。

 

※2013/04/20追記:

Visual C++ 2012は2010と同じ.user.propsファイルを使うようになっているんですが、「プロパティ マネージャー」を使用した方法だと、VC++ 2012でWindowsストア アプリを開発するときに問題が発生します。

具体的にいうと、UIを使った編集を行なって保存した場合、.user.propsファイルの

  <ItemDefinitionGroup />

タグが、

  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>
      </AdditionalIncludeDirectories>
    </ClCompile>
  </ItemDefinitionGroup>

となってしまう模様(おそらくIDEのバグ)。

後者の状態になると、Visual C++ プロジェクトごとの「追加のインクルード ディレクトリ」の値は、デフォルトの "$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)" ではなく、空の設定値になってしまいます。
この状態でXAMLを使ったストア アプリのC++プロジェクトをそのままビルドしようとすると、App.xaml.h で app.g.h のインクルードに失敗するなどの影響が出てしまいます。
したがって、VC++ 2010/2012のグローバル ディレクトリの設定は、プロパティ マネージャーのUIを使わずに、やはり.user.propsの直接編集で対応するようにしたほうが良いでしょう。

ちなみにVS 2012ではx86、x64に加えてARM版も開発できるようになっていますが、要領は同じです。

おうちのプログラミング環境はほぼVS 2010/2012に移行しましたが、使っているうちに、.user.propsを使うように仕様変更されたおかげでバックアップや設定値コピーがしやすくなったので、今思えば返って良い仕様変更だったとすら感じますね……ただ、コンパイラのバージョンごとにリンクするライブラリを変えたい場合は、プロジェクト ファイル側でディレクトリ設定値をオーバーライドするか、コンパイラ バージョンごとにライブラリ ファイル名を変える方向で対応する必要があります。

あと、VS 2012でWindowsストア アプリも開発する場合、旧DirectX SDK(June 2010とか)のディレクトリ優先度をWindows SDKディレクトリ($(IncludePath)、$(LibraryPath)に含まれる)よりも上げるのはNGです。↑でアップしてるサンプルの.user.propsファイルはVS 2010を使い始めた頃に作ったもので、当時は逆にWindows SDK(7.x)よりもDX SDKの優先度を上げておかないとD3DCommon.hまわりでコンパイル エラーになってました。

なお、.user.propsファイルを直接編集する場合は、誤って編集ミスしても簡単にロールバックできるように、VSインストール直後のファイルをバックアップしておくことをお勧めします。

 

コメント

コメントを投稿

コメントは記事の投稿者が承認するまで表示されません。

リンク「虹を待ちながら」

  • 助手とバイト戦士が大好物でいらっしゃる枇杷さんブログ。

twitter

pixiv

  • お絵かきしてみませう

ツンツンしてた小悪魔妹が嫁になるまでデレた理由

  • ツンデレの王道ですね

箱入少女

  • エンディングが好きです

ツナグキズナ

  • アニメ「ヨスガノソラ」ED

C++ Coding Standards

  • コーディングルールの良書

最近の記事

OCN 検索

2013年10月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

最近のトラックバック

Powered by Blogzine[ブログ人]