Visual Studio で Linux MSBuild C++ プロジェクトを構成する

Linux サポートは Visual Studio 2017 以降で使用できます。

このトピックでは、「Visual Studio で Linux MSBuild C++ プロジェクトを作成する」で説明されているように、MSBuild ベースの Linux プロジェクトを構成する方法について説明します。 Linux CMake プロジェクトについては、「Linux CMake プロジェクトを構成する」を参照してください。

物理的な Linux マシン、仮想マシン、または Windows Subsystem for Linux (WSL) を対象にするように、Linux プロジェクトを構成できます。

Visual Studio 2019 バージョン 16.1 以降:

  • WSL を対象にするとき、リモート Linux システムを対象にするときに必要となる IntelliSense をビルドし、取得するために必要なコピー操作を回避できます。

  • ビルドとデバッグに別の Linux ターゲットを指定できます。

全般設定

構成オプションを表示するには、[プロジェクト] > [プロパティ] メニューの順に選択するか、ソリューション エクスプローラーでプロジェクトを右クリックし、コンテキスト メニューから [プロパティ] を選択します。 [全般] 設定が表示されます。

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

既定では、実行可能ファイル (.out) がビルドされます。 静的または動的なライブラリをビルドする場合や、既存のメイクファイルを使用する場合は、 [構成の種類] 設定を使用します。

Linux 用 Windows サブシステム (WSL) をビルドする場合、WSL バージョン 1 の並列コンパイル プロセスは 64 個に制限されます。 これは [構成]プロパティ >[C/C++] > [全般][最大同時コンパイル ジョブ] によって制御されます。

使用している WSL のバージョンに関係なく、64 個以上の並列コンパイル プロセスを使用する場合、高速で信頼性が高いとされる Ninja でビルドすることをお勧めします。 Ninja でビルドするには、[構成] プロパティの >[全般][インクリメンタル ビルドを有効にする] 設定を使用します。

プロパティ ページの設定に関する詳細については、「Linux プロジェクト プロパティ ページの参照」を参照してください。

リモート設定

リモート Linux コンピューターに関連する設定を変更するには、[全般] に表示されるリモート設定を構成します。

  • リモートのターゲット Linux コンピューターを指定するには、 [リモート ビルド マシン] エントリを使用します。 これによって、以前に作成された接続のいずれかを選択できます。 新しいエントリを作成する場合は、リモートの Linux コンピューターへの接続に関するセクションを参照してください。

    [リモート ビルド マシン] が表示されているスクリーンショット。

    Visual Studio 2019 バージョン 16.7 以降: Linux 用 Windows サブシステム (WSL) を対象にするには、 [プラットフォームのツールセット] ドロップダウンを [GCC for Windows Subsystem for Linux]\(Linux 用 Windows サブシステムの GCC\) に設定します。 その他のリモート オプションは消え、既定の WSL シェルへのパスが代わりに表示されます。

    [WSL ビルド マシン] が表示されているスクリーンショット。

    サイド バイ サイドの WSL インストールがある場合は、ここで別のパスを指定できます。 複数の配布の管理に関する詳細については、「Manage and configure Windows Subsystem for Linux」(Windows Subsystem for Linux の管理と構成) を参照してください。

    [構成プロパティ]>[デバッグ] ページで、デバッグに異なるターゲットを指定できます。

  • [リモート ビルド ルート ディレクトリ] で、リモートの Linux コンピューター上のプロジェクトを構築するルート場所が決定します。 これは、変更しない限り、既定で ~/projects に設定されます。

  • [リモート ビルド プロジェクト ディレクトリ] は、リモートの Linux コンピューターでこの特定のプロジェクトが構築される場所です。 これは、既定で $(RemoteRootDir)/$(ProjectName) に設定され、上で設定したルート ディレクトリ下の、現在のプロジェクトから名前が付けられたディレクトリに展開されます。

Note

既定の C および C++ コンパイラ、またはプロジェクトのビルドに使用したリンカーとアーカイバーを変更する場合は、[C/C++] > [全般] セクションと [リンカー] > [全般] セクションで適切なエントリを使用します。 たとえば、GCC や Clang の特定のバージョンを指定できます。 詳細については、「C/C++ プロパティ (Linux C++)」と「リンカー プロパティ (Linux C++)」を参照してください。

ソースのコピー (リモート システムのみ)

Note

このセクションは、WSL を対象とするときには適用されません。

リモート システムのビルド時に、開発用 PC 上のソース ファイルは、Linux コンピューターにコピーされ、そこでコンパイルされます。 既定では、Visual Studio プロジェクトのすべてのソースは、上記の設定で指定された場所にコピーされます。 ただし、リストにさらにソースを追加するこもできます。あるいは、ソースのコピーを完全にオフ (メイクファイル プロジェクトではこれが既定) にすることもできます。

  • [コピーするソース] で、リモート コンピューターにコピーするソースが決定します。 既定では、@(SourcesToCopyRemotely) がプロジェクトのすべてのソース コード ファイルの既定値ですが、画像などの資産ファイルやリソース ファイルは含まれません。

  • [ソースのコピー] をオンまたはオフにして、リモート コンピューターへのソース ファイルのコピーを有効または無効にすることができます。

  • [コピーする追加ソース] では、リモート システムにコピーするソース ファイルを追加することができます。 セミコロンで区切ったリストを指定することも、次のように、 := 構文で使用するローカルおよびリモート名を指定することもできます。

C:\Projects\ConsoleApplication1\MyFile.cpp:=~/projects/ConsoleApplication1/ADifferentName.cpp;C:\Projects\ConsoleApplication1\MyFile2.cpp:=~/projects/ConsoleApplication1/ADifferentName2.cpp;

ビルド イベント

すべてのコンパイルはリモート コンピューター (または WSL) で実行されるため、プロジェクト プロパティの [ビルド イベント] セクションにいくつかのビルド イベントが追加されています。 追加されたのは [リモートのビルド前イベント][リモートのリンク前イベント][リモートのビルド後イベント] で、リモート コンピューターでプロセスの個々のステップの前後に発生します。

[ビルド イベント] が表示されている [プロパティ ページ] ダイアログのスクリーンショット。

リモート システムのヘッダーでの IntelliSense

接続マネージャーで新しい接続を追加すると、Visual Studio によってリモート システム上のコンパイラのインクルード ディレクトリが自動的に検出されます。 Visual Studio によってこれらのファイルが圧縮されて、お使いのローカル Windows コンピューター上のディレクトリにコピーされます。 その後、Visual Studio または CMake プロジェクトでその接続を使用するたびに、IntelliSense を提供するためにこれらのディレクトリ内のヘッダーが使用されます。

Note

Visual Studio 2019 バージョン 16.5 以降では、リモート ヘッダーのコピーが最適化されています。 Linux プロジェクトを開くとき、または Linux ターゲットに合わせて CMake を構成するときに、ヘッダーがオンデマンドでコピーされるようになりました。 コピーは、プロジェクトに指定されたコンパイラに基づいて、プロジェクトごとにバックグラウンドで実行されます。 詳細については、「Linux IntelliSense の精度とパフォーマンスの改善点」を参照してください。

この機能は、Linux コンピューターにインストールされている zip に依存します。 この apt-get コマンドを使用して、zip をインストールできます。

sudo apt install zip

ヘッダーのキャッシュを管理するには、[ツール] > [オプション]、[クロス プラットフォーム] > [接続マネージャー] > [リモート ヘッダー IntelliSense マネージャー] の順に移動します。 Linux コンピューターに変更を行った後にヘッダー キャッシュ更新するには、リモート接続を選択してから、 [更新] を選択します。 接続自体を削除せずにヘッダーを削除するには、 [削除] を選択します。 ファイル エクスプローラーでローカル ディレクトリを開くには、 [探索] を選択します。 このフォルダーを読み取り専用として扱います。 Visual Studio 2017 バージョン 15.3 より前に作成された既存の接続用にヘッダーをダウンロードするには、その接続を選択し、 [ダウンロード] を選択します。

[クロス プラットフォーム] > [接続マネージャー] > [リモート ヘッダー IntelliSense マネージャー] が選択された [オプション] ダイアログ ボックスを示すスクリーンショット。

[クロス プラットフォーム] > [接続マネージャー] が選択された [オプション] ダイアログ ボックスを示すスクリーンショット。

ログ記録を有効にして、問題のトラブルシューティングに役立てることができます。

[リモートログ記録] オプションが表示されている [オプション] ダイアログのスクリーンショット。

Linux ターゲットのロケール

Visual studio はインストールされているパッケージを管理または構成しないため、Visual Studio の言語設定は Linux ターゲットに反映されません。 ビルド エラーなどの [出力] ウィンドウに表示されるメッセージは、Linux ターゲットの言語とロケールを使用して表示されます。 目的のロケールに合わせて Linux ターゲットを構成する必要があります。

関連項目

コンパイラとビルドのプロパティの設定
C++ 全般プロパティ (Linux C++)
VC++ ディレクトリ (Linux C++)
ソースのプロジェクト プロパティのコピー (Linux C++)
ビルド イベント プロパティ (Linux C++)