web-dev-qa-db-ja.com

Visual Studioにサブディレクトリを含める方法は?

異なるサブディレクトリにある多くのヘッダーファイルをインクルードする必要があります。 Visual Studio(2005年版を使用しています)に、Visual Studioがヘッダーファイルのサブディレクトリも検索する1つのインクルードパスを設定する方法はありますか?

15
kklobucki

インクルードの問題を修正するためにVisualStudio設定でフォルダー検索パスを設定することは、通常、設計の観点からはあまり良い考えではありません。コードは、ディレクトリレイアウトが異なるさまざまなマシンへの移植性が低くなります。

私の提案は、サブディレクトリの相対パス(インクルードコードに対する)が固定されるように、コードの編成を決定することです。

  • 「ベースフォルダ」をプロジェクトに追加します(プロジェクトプロパティ->構成プロパティ-> C/C++->追加のインクルードディレクトリ、「追加のインクルードディレクトリ」
  • サブディレクトリを#includeステートメントに追加します。つまり、#include "subdirectory/somefile.h"

これには、ソリューション内のどのフォルダーにファイルが含まれているかを確認できるという追加のボーナスがあります。これは、回避策を見つけようとしているとき、またはファイルの目的を理解しようとしているときに役立つ情報です。

20

Visual Studioで再帰的なフォルダー検索を設定する方法は見つかりませんでした(ただし、Xcodeはそれらの設定と使用に問題はありません)。ファイル内のすべてのディレクトリを一覧表示し、C/C++コマンドラインの追加オプションでファイルを指定します。

@ "IncludeFolders.rsp"

再帰検索を使用して問題が見つかることはめったにありませんが、誤って「/」を含めると、処理が少し遅くなります。

6
David Sykes

インクルードファイルの再帰検索を使用すると、間違ったファイルや間違ったバージョンがインクルードされるという形で解決するよりもはるかに多くの問題が発生すると思います。結局のところ、プロジェクトを設定するときに、適切なディレクトリを一度定義する必要があります。

1
Tuminoid

SUBSTコマンドを使用したわずかな手先の早業によって、MSVCを含むほとんどの状況で、パスの長さを短くできることがわかりました。デフォルトの継承されたC++インクルードパスを短縮する例を示しますが、プロジェクト関連のインクルードパスに対してこれを行います。まず、次のような1つ以上のバッチファイルを作成します(そして、Windowsエクスプローラーまたはコマンドラインから実行します)。

MDrive.bat:
subst M: /D
subst M: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC"

WDrive.bat:
subst W: /D
subst W: "C:\Program Files (x86)\Windows Kits\8.1\Include"

... This is just and example.  You would do this for your
    project related include directories.

長いパス用にこれらをいくつか作成できます。上記の場合、MSVCがデフォルトで使用する標準の継承パスのみを短縮しています。ところで、Substコマンドは管理者権限なしで機能しますが、既存の物理ドライブ文字またはマップされたドライブ文字を踏まないでください(どうなるかわかりません。現時点ではテストしたくありません)。

このステップはオプションです。 MSVS 2010+では、カスタムプロパティシートを追加します。 ところで、カスタムプロパティシートについてわからない場合は、そうする必要があります。プロパティページ(Visual C++) を参照してください。 VIEW-その他のウィンドウ-プロパティウィンドウ、プロパティマネージャーでプロジェクトを右クリックします新しいプロジェクトプロパティシートを追加しますユーザーマクロの下に、マクロを追加します。例: MyProjectIncludePathsそして値(この例では)をに設定します

M:; M:\atlmfc\include; W:\um; W:\shared; W:\winrt

-この例では49文字のみで、デフォルトの

$(VC_IncludePath); $(WindowsSKD_IncludePath)

これは、マクロ展開時に次のように変換されます。

C:\Program Files (x86)\Windows Kits\8.1\Include;C:\Program Files (x86)\Windows Kits\8.1\Include\atlmfc\include;C:\Program Files (x86)\Windows Kits\8.1\Include\um;C:\Program Files (x86)\Windows Kits\8.1\Include\shared;C:\Program Files (x86)\Windows Kits\8.1\Include\winrt

私のカウントでは、デフォルトは270文字です。 260文字より長い-誰かがこれを説明できますか?

プロジェクトのプロパティページ(つまり、カスタムプロパティシートではない)で、私の例では構成プロパティ-VC++ディレクトリそしてInclude Directories値を$(MyProjectIncludePaths)に変更しましたが、実際には(カスタムプロパティで)に移動しますシートページを作成した場合)C/C++-Generalそして$(MyProjectIncludePaths)追加のインクルードディレクトリ

継承された270文字のパスに加えて、Additional Include Directoriesの下にいくつかの妥当な長さのパスを追加することができました。たぶん、追加のインクルードディレクトリには独自の長さ制限(?)があります。

1
riderBill