コンパイラとビルドのプロパティの設定

IDE では、プロパティはプロジェクトの構築に必要な情報を公開します。 この情報には、アプリケーションの名前、拡張子 (DLL、LIB、EXE)、コンパイラ オプション、リンカー オプション、デバッガーの設定、カスタム ビルド ステップ、その他多くの情報が含まれます。 通常、これらのプロパティを表示および変更するには、"プロパティ ページ" を使用します。 プロパティ ページにアクセスするには、メイン メニューで [プロジェクト]>[project-name のプロパティ] を選択するか、ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[プロパティ] を選択します。

既定のプロパティ

プロジェクトを作成すると、システムによってさまざまなプロパティの値が割り当てられます。 プロジェクトの種類およびアプリ ウィザードで選んだオプションにより、既定値は若干異なります。 たとえば、ATL プロジェクトには MIDL ファイルに関するプロパティがありますが、これらのプロパティは基本的なコンソール アプリケーションにはありません。 既定のプロパティは、プロパティ ページの [全般] ウィンドウに表示されます。

Visual Studio プロジェクトのプロパティ ダイアログのスクリーンショット。

[全般] ページが開いています。 [プロジェクトの既定値] セクションが強調表示され、[構成の種類] が [アプリケーション (.exe)] に設定され、[MFC の使用] が [標準 Windows ライブラリを使用] に設定され、[文字セット] が Unicode で、[共通言語ランタイム サポート] が [共通言語ランタイム サポートなし] に設定され、[プログラム全体の最適化] が [プログラム全体の最適化なし] に設定され、[Windows ストア アプリのサポート] が [いいえ] に設定されています。

ビルド構成とターゲット プラットフォームへのプロパティの適用

アプリケーション名などの一部のプロパティは、デバッグ ビルドかリリース ビルドかに関係なく、ビルドのバリエーションとターゲット プラットフォームのすべてに適用されます。 ただし、ほとんどのプロパティは構成に依存します。 正しいコードを生成するには、プログラムが実行される特定のプラットフォームと、使う特定のコンパイラ オプションの両方をコンパイラに指示する必要があります。 そのため、プロパティを設定するときは、新しい値を適用する必要がある構成とプラットフォームに注意を払う必要があります。 "デバッグ Win32" ビルドだけに適用する必要がありますか、それとも "デバッグ ARM64" と "デバッグ x64" にも適用する必要がありますか。 たとえば、既定の [最適化] プロパティは、リリース構成では [実行速度 (/O2)] に設定されますが、デバッグ構成では無効になっています。

プロパティ値を適用する必要がある構成とプラットフォームは、いつでも表示および変更できます。 次の図のプロパティ ページでは、構成とプラットフォームの情報が上部のコントロールに表示されています。 ここで [最適化] プロパティを設定すると、現在アクティブな構成として赤い矢印で示されている "デバッグ Win32" ビルドのみに設定が適用されます。

Visual Studio の [プロパティ ページ] ダイアログのスクリーンショット。

このページでは C/C++、最適化が開かれています。 最適化設定は無効 (/Od) に設定されており、コールアウトが示されています。矢印は、プロジェクト プロパティ ページの [構成] 設定 ([アクティブ (デバッグ)] に設定) と、ツール バーの [ソリューション構成] ドロップダウンの設定 ([デバッグ] に設定) との間の関係をコールアウトで示しています。 別の矢印は、プロジェクト プロパティ ページのプラットフォーム設定 ([アクティブ (Win32)] に設定) と、ツール バーのソリューション プラットフォーム ドロップダウンの設定 ([x86] に設定) の間の関係をコールアウトで示しています。

次の図も同じプロジェクトのプロパティ ページですが、構成がリリースに変更されています。 [最適化] プロパティの値が異なることに注意してください。 また、アクティブな構成はまだデバッグであることにも注意してください。 ここでは、任意の構成のプロパティを設定することができます。アクティブである必要はありません。

Visual Studio プロジェクトの [プロパティ ページ] ダイアログのスクリーンショット。[構成] ドロップダウンではコールアウトが示され、[リリース] に設定されています。[C/C++] > [最適化] > [最適化設定] は、[実行速度 (/O2)] に設定されています。

対象プラットフォーム

"ターゲット プラットフォーム" とは、実行可能ファイルが実行されるデバイスとオペレーティング システムの種類のことです。 複数のプラットフォームを対象としてプロジェクトをビルドすることができます。 C++ プロジェクトで使用可能なターゲット プラットフォームは、プロジェクトの種類によって異なります。 Win32、x64、ARM、ARM64、Android、iOS などが含まれますが、これらだけではありません。 構成マネージャーで表示される x86 ターゲット プラットフォームは、ネイティブ C++ プロジェクトの Win32 と同じです。 Win32 とは 32 ビットの Windows を意味し、x64 は 64 ビットの Windows を意味します。 これら 2 つのプラットフォームについて詳しくは、「32 ビット アプリケーションの実行」をご覧ください。

構成マネージャーに表示されるターゲット プラットフォームの値 [任意の CPU] は、ネイティブ C++ プロジェクトには影響を与えません。 これは、C++/CLI とその他の .NET プロジェクトの種類のみに関係がある値です。 詳細については、「/CLRIMAGETYPE (CLR イメージのタイプの指定)」を参照してください。

デバッグ ビルド用のプロパティの設定の詳細については、以下を参照してください。

C++ のコンパイラとリンカーのオプション

C++ のコンパイラ オプションとリンカー オプションは、左側のウィンドウの [構成プロパティ] の下にある [C/C++] ノードと [リンカー] ノードの下に配置されています。 これらのオプションは、コンパイラに渡されるコマンドライン オプションに直接変換されます。 特定のオプションに関するドキュメントを参照するには、中央のウィンドウでオプションを選択し、F1 を押します。 または、MSVC コンパイラ オプションMSVC リンカー オプションで、すべてのオプションのドキュメントを参照できます。

[プロパティ ページ] ダイアログ ボックスには、現在のプロジェクトに適用するプロパティ ページのみが表示されます。 たとえば、プロジェクトに .idl ファイルが含まれていない場合、MIDL プロパティ ページは表示されません。 各プロパティ ページの設定の詳細については、「プロパティ ページ (C++)」を参照してください。

ディレクトリとパスの値

MSBuild では、インクルード ディレクトリやインクルード パスなどの特定の文字列値に対して "マクロ" と呼ばれるコンパイル時定数の使用がサポートされています。 マクロでは、Visual Studio や MSBuild システムによって定義されている値、またはユーザー定義の値を参照することができます。 マクロは $(macro-name)%(item-macro-name) のようになります。 プロパティ ページに表示され、プロパティ エディターを使用して参照したり変更したりできます。 ディレクトリ パスなどのハードコードされた値の代わりにマクロを使用します。 マクロを使用すると、マシン間および Visual Studio のバージョン間でプロパティ設定を共有しやすくなります。 また、プロジェクト設定がプロパティの継承に正しく参加することをより確実にできます。

次の図は、Visual Studio C++ プロジェクトのプロパティ ページを示しています。 左側のウィンドウでは [VC++ ディレクトリ]ルール が選択され、右側のウィンドウには、そのルールに関連付けられているプロパティの一覧が表示されています。 プロパティ値は多くの場合、$(VC_SourcePath) などのマクロです。

さまざまなディレクトリのルールを示す Visual Studio の [プロパティ ページ] ダイアログのスクリーンショット。

[VC++ ディレクトリ] ページが開き、VC++ ディレクトリのルールのプロパティが表示されます。 ルールの例としては、$(VC_SourcePath) に設定されるソース ディレクトリがあります。 インクルード ディレクトリ、ライブラリ ディレクトリ、実行可能ディレクトリなどのルールがあります。

プロパティ エディターを使って、すべての使用可能なマクロの値を見ることができます。

定義済みマクロ

  • グローバル マクロ
    グローバル マクロは、プロジェクト構成のすべての項目に適用されます。 グローバル マクロの構文は $(name) のようになります。 Visual Studio インストールのルート ディレクトリを格納するグローバル マクロの例は $(VCInstallDir) です。 グローバル マクロは、MSBuild の PropertyGroup に対応します。

  • 項目マクロ
    項目マクロの構文は %(name) のようになります。 ファイルの場合、項目マクロはそのファイルのみに適用されます。たとえば、%(AdditionalIncludeDirectories) を使用して、特定のファイルだけに適用するインクルード ディレクトリを指定します。 この種類の項目マクロは、MSBuild の ItemGroup のメタデータに対応します。 プロジェクト構成のコンテキストで使うと、項目マクロは特定の種類のすべてのファイルに適用されます。 たとえば、C/C++ の [プリプロセッサの定義] 構成プロパティは、プロジェクトのすべての .cpp ファイルに適用する %(PreprocessorDefinitions) 項目マクロを使用できます。 この種類の項目マクロは、MSBuild の ItemDefinitionGroup のメタデータに対応します。 詳細については、「項目定義」を参照してください。

ユーザー定義マクロ

プロジェクトのビルドで変数として使う "ユーザー定義マクロ" を作成できます。 たとえば、ユーザー定義のマクロを作成して、カスタム ビルド ステップまたはカスタム ビルド ツールに値を渡すことができます。 ユーザー定義マクロは、名前と値のペアです。 プロジェクト ファイルでは、$(name) という表記を使用して、その値にアクセスします。

ユーザー定義マクロは、プロパティ シートに格納されます。 プロジェクトにプロパティ シートが含まれていない場合は、「Visual Studio プロジェクトの設定を共有または再利用する」の手順に従って作成できます。

ユーザー定義マクロを作成するには

  1. プロパティ マネージャー ウィンドウを開きます (メニュー バーで、[表示]>[プロパティ マネージャー] または [表示]>[その他のウィンドウ]>[プロパティ マネージャー] を選択します)。プロパティ シート (名前の末尾が .user) のショートカット メニューを開き、[プロパティ] をクリックします。 そのプロパティ シートの [プロパティ ページ] ダイアログ ボックスが開きます。

  2. ダイアログ ボックスの左ウィンドウで、[ユーザー マクロ] を選びます。 右ウィンドウで [マクロの追加] ボタンを選んで、[ユーザー マクロの追加] ダイアログ ボックスを開きます。

  3. ダイアログ ボックスで、マクロの名前と値を指定します。 必要に応じて、[ビルド環境でこのマクロを環境変数として設定します] チェック ボックスをオンにします。

プロパティ エディター

プロパティ エディターを使用して、特定の文字列プロパティを変更し、値としてマクロを選択できます。 プロパティ エディターにアクセスするには、プロパティ ページのプロパティを選択し、右側のドロップダウン矢印をクリックします。 ドロップダウン リストに [<編集>] が含まれている場合、それを選ぶと、そのプロパティのプロパティ エディターを表示できます。

Visual Studio プロジェクトにおける VC++ ディレクトリのプロパティ ページのスクリーンショット。

[インクルード ディレクトリ] 設定のプロパティ エディターが開きます。 インクルード ディレクトリに評価された値 (C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\Include) が表示されます。 2 つの継承された値 $(VC_IncludePath) と $(WindowsSDK_IncludePath) が表示されます。 [親またはプロジェクトの既定値から継承] チェックボックスがオンになっています。

プロパティ エディターで [マクロ] を選んで、使用できるマクロとその現在の値を見ることができます。 次の図は、[マクロ] を選んだ後の [追加のインクルード ディレクトリ] プロパティのプロパティ エディターを示したものです。 [親またはプロジェクトの既定値から継承] チェック ボックスをオンにして新しい値を追加すると、現在継承されているすべての値に追加されます。 チェック ボックスをオフにすると、継承された値が新しい値に置き換えられます。 ほとんどの場合、チェック ボックスはオンのままにします。

[マクロ] ボタンを選んだ後のプロパティ エディター ダイアログのスクリーンショット。

[インクルード ディレクトリ] のプロパティ エディターが開いています。 評価された値は継承された値と共に表示されます。 リストボックスには、Unicode に設定されている $(CharacterSet) など、さまざまなマクロとその値が含まれています。

既定のディレクトリ セットにインクルード ディレクトリを追加する

プロジェクトにインクルード ディレクトリを追加する場合、すべての既定のディレクトリをオーバーライドしないことが重要です。 ディレクトリを追加するための正しい方法は、"C:\MyNewIncludeDir\" のような新しいパスを追加し、プロパティ値に $(IncludePath) マクロを追加することです。

すべてのプロパティをすばやく参照および検索するには

[すべてのオプション] プロパティ ページ ([プロパティ ページ] ダイアログ ボックスの [構成プロパティ]>[C/C++] ノードの下) には、現在のコンテキストで使用できるプロパティを簡単に参照および検索する方法が用意されています。 これには特別な検索ボックスと単純な構文が用意されており、結果をフィルター処理できます。

プレフィックスなし:
プロパティ名のみで検索 (大文字と小文字を区別しない部分文字列)。

'/' または '-':
コンパイラ スイッチのみで検索 (大文字と小文字を区別しないプレフィックス)。

v:
値のみで検索 (大文字と小文字を区別しない部分文字列)。

ビルドの環境変数を設定する

MSVC コンパイラ (cl.exe) では、特定の環境変数 (具体的には LIBLIBPATHPATH、および INCLUDE) が認識されます。 IDE でビルドすると、VC++ ディレクトリのプロパティ ページで設定されたプロパティを使用して環境変数が設定されます。 LIBLIBPATH、および INCLUDE の値が (たとえば、開発者コマンド プロンプトによって) 既に設定されている場合、それらは対応する MSBuild プロパティの値に置き換えられます。 その後、ビルドによって、VC++ ディレクトリの実行ファイル ディレクトリのプロパティの値が PATH に追加されます。 ユーザー定義マクロを作成して [ビルド環境でこのマクロを環境変数として設定します] チェック ボックスをオンにすると、ユーザー定義の環境変数を設定できます。

デバッグ セッションの環境変数を設定する

プロジェクトの [プロパティ ページ] ダイアログ ボックスの左ウィンドウで [構成プロパティ] を展開し、[デバッグ] を選びます。

右ウィンドウで [環境] または [マージ環境] のプロジェクト設定を変更して、[OK] をクリックします。

このセクションの内容

Visual Studio プロジェクトの設定を共有または再利用する
共有または再利用が可能なカスタム ビルド設定を使用する .props ファイルの作成方法。

プロジェクト プロパティの継承
ビルド プロセスでの .props.targets.vcxproj の各ファイル、および環境変数の評価順序について説明します。

プロジェクト ファイルを変更しないでプロパティとターゲットを変更する
プロジェクト ファイルを変更せずに一時的なビルド設定を作成する方法。

関連項目

Visual Studio プロジェクト - C++
.vcxproj および .props ファイルの構造
プロパティ ページの XML ファイル