Share via


Visual Studio で Linux CMake プロジェクトを構成する

Linux サポートは Visual Studio 2017 以降で使用できます。 これらのバージョンのドキュメントを表示するには、目次の上にある [バージョン] ドロップダウンを Visual Studio 2017 または Visual Studio 2019 に設定します。

このトピックでは、リモート Linux システムまたは Linux 用 Windows サブシステム (WSL) のいずれかを対象とする CMake プロジェクトに Linux 構成を追加する方法について説明します。 これは、Visual Studio での Linux CMake プロジェクトの作成に関する記事から始まるシリーズの続きです。 MSBuild を使用している場合は、代わりに Visual Studio での Linux MSBuild プロジェクトの構成に関する記事を参照してください

Linux の構成を追加する

構成を使用すると、同じソース コードで異なるプラットフォーム (Windows、WSL、リモートシステム) を対象にすることができます。 構成は、コンパイラを設定し、環境変数を渡し、CMake の呼び出し方法をカスタマイズするためにも使用されます。 CMakeSettings.json ファイルでは、CMake 設定のカスタマイズに関するページで一覧表示されている一部またはすべてのプロパティに加え、リモートの Linux コンピューター上のビルド設定を制御するその他のプロパティを指定します。

Visual Studio 2017 で既定の CMake 設定を変更するには、メイン メニューから [CMake]>[CMake の設定を変更]>[CMakeLists.txt] を選択します。 または、ソリューション エクスプローラーCMakeLists.txt を右クリックし、 [CMake の設定を変更] を選択します。 Visual Studio によって、ルート プロジェクト フォルダー内に新しい CMakeSettings.json ファイルが作成されます。 変更するには、ファイルを開き、直接変更します。 詳細については、「Customize CMake settings」 (CMake 設定のカスタマイズ) を参照してください。

Visual Studio 2017 (および Visual Studio 2019 バージョン 16.0) での Linux-Debug の既定の構成は、次のようになります。

{
  "configurations": [
    {
      "name": "Linux-Debug",
      "generator": "Unix Makefiles",
      "remoteMachineName": "${defaultRemoteMachineName}",
      "configurationType": "Debug",
      "remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}",
      "cmakeExecutable": "/usr/local/bin/cmake",
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}",
      "remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}",
      "remoteCopySources": true,
      "remoteCopySourcesOutputVerbosity": "Normal",
      "remoteCopySourcesConcurrentCopies": "10",
      "remoteCopySourcesMethod": "rsync",
      "remoteCopySourcesExclusionList": [
        ".vs",
        ".git"
      ],
      "rsyncCommandArgs": "-t --delete --delete-excluded",
      "remoteCopyBuildOutput": false,
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "inheritEnvironments": [
        "linux_x64"
      ]
    }
  ]
}

Visual Studio 2019 以降の CMake の既定の設定を変更するには、メイン ツールバーから [構成] ドロップダウンを開き、 [構成の管理] を選択します。

[構成] ドロップダウンで CMake の [構成の管理] が強調表示されたスクリーンショット。

このコマンドにより CMake 設定エディターが開かれます。これを使用してルート プロジェクト フォルダー内の CMakeSettings.json ファイルを編集できます。 CMake の設定ダイアログの右上にある [JSON の編集] ボタンをクリックして、JSON エディターでファイルを開くこともできます。 詳細については、CMake 設定のカスタマイズに関するページを参照してください。

Visual Studio 2019 バージョン 16.1 以降での Linux-Debug の既定の構成は次のようになります。

{
  "configurations": [
    {
      "name": "Linux-GCC-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "cmakeExecutable": "cmake",
      "remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ],
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "inheritEnvironments": [ "linux_x64" ],
      "remoteMachineName": "${defaultRemoteMachineName}",
      "remoteCMakeListsRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/src",
      "remoteBuildRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/build/${name}",
      "remoteInstallRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/install/${name}",
      "remoteCopySources": true,
      "rsyncCommandArgs": "-t --delete --delete-excluded",
      "remoteCopyBuildOutput": false,
      "remoteCopySourcesMethod": "rsync",
      "variables": []
    }
  ]
}

Visual Studio 2019 バージョン 16.6 以降では、Unix Makefiles ではなく Ninja が、リモート システムまたは WSL をターゲットとする構成の既定のジェネレーターです。 詳細については、C++ チームのこちらのブログ記事を参照してください。

これらの設定の詳細については、CMakeSettings.json リファレンスに関するページを参照してください。

ビルドを実行する場合:

  • リモート システムを対象にしている場合、Visual Studio では、リモート ターゲットに対する既定として、[ツール]>[オプション]>[クロス プラットフォーム]>[接続マネージャー] の下にある最初のリモート システムが選択されます。
  • リモート接続が見つからない場合、リモート接続を作成するように求められます。 詳細については、リモートの Linux コンピューターへの接続に関するページを参照してください。

Linux ターゲットを選ぶ

CMake プロジェクト フォルダーを開くと、Visual Studio によって CMakeLists.txt ファイルが解析され、x86-Debug の Windows ターゲットが指定されます。 リモート Linux システムをターゲットにするには、Linux コンパイラに基づいてプロジェクト設定を変更します。 たとえば、Linux で GCC を使用し、デバッグ情報を使ってコンパイルする場合は、Linux-GCC-Debug または Linux-GCC-Release を選択します。

リモートの Linux を対象に指定した場合、ソースはリモート システムにコピーされます。

対象を選択したら、CMake は Linux システム上で自動実行され、プロジェクト用の CMake キャッシュを生成します。

Linux で生成された CMake キャッシュの出力が表示されている Visual Studio のスクリーンショット。

Linux 用 Windows サブシステムを対象にする

Linux 用 Windows サブシステム (WSL) が対象の場合は、リモート接続を追加する必要はありません。

WSL を対象にするには、メイン ツールバーの構成ドロップダウンの [構成の管理] を選択します。

[構成の管理] が選択されている CMake 構成ドロップダウン

[CMakeSettings.json] ウィンドウが表示されます。

選択した構成 (Linux-GCC-debug) を追加するプラス ボタンが強調されている CMake 設定ダイアログ。

[構成の追加] (緑の '+' ボタン) を押した後、GCC を使用する場合は Linux-GCC-Debug または Linux-GCC-Release を選択します。 Clang/LLVM ツールセットを使用する場合は [Clang バリアント] を使用します。 [選択] を押した後、Ctrl + S キーを押して構成を保存します。

Visual Studio 2019 バージョン 16.1 WSL が対象の場合、Visual Studio では、ソース ファイルをコピーし、ビルド ツリーの 2 つの同期コピーを保持する必要はありません。これは、Linux 上のコンパイラが、マウントされた Windows ファイル システムのソース ファイルに直接アクセスできるためです。

IntelliSense

正確な C++ IntelliSense では、C++ ソース ファイルによって参照される C++ ヘッダーへのアクセスが必要です。 Visual Studio により、Linux から Windows の CMake プロジェクトによって参照されるヘッダーが自動的に使用されて、完全に忠実な IntelliSense エクスペリエンスが提供されます。 詳細については、リモート ヘッダーの IntelliSense のセクションを参照してください。

ロケールの設定

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

詳細設定

ビルドの前後や CMake 生成の前に Linux システムでコマンドを実行するには、次の設定を使用します。 値は、リモート システムで有効な任意のコマンドを指定できます。 出力はパイプで Visual Studio に戻されます。

{
      "remotePrebuildCommand": "",
      "remotePreGenerateCommand": "",
      "remotePostbuildCommand": "",
}

次の手順

CMake デバッグ セッションを構成する

関連項目

プロジェクトのプロパティの操作
CMake 設定をカスタマイズする
CMake 定義済み構成リファレンス