分享方式:


在 Visual Studio 中設定 Linux CMake 專案

Visual Studio 2017 及更新版本支援 Linux。 若要查看這些版本的檔,請將位於目錄上方的 [ 版本 ] 下拉式清單設定為 Visual Studio 2017 或 VisualStudio 2019

本主題描述如何將 Linux 設定新增至以遠端 Linux 系統或 Windows 子系統 Linux 版 (WSL) 為目標的 CMake 專案。 它會繼續從 在 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。 或者,以滑鼠右鍵按一下Solution Explorer中的[CMakeLists.txt],然後選擇 [變更 CMake 設定]。 Visual Studio 接著會在根專案資料夾中建立新的 CMakeSettings.json 檔案。 若要進行變更,請開啟檔案並直接加以修改。 如需詳細資訊,請參閱 自訂 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 版或更新版本中,Ninja 是以遠端系統或 WSL 為目標之設定的預設產生器,而不是 Unix Makefiles。 如需詳細資訊,請參閱 C++ 小組部落格上的這篇文章。

如需有關這些設定的詳細資訊,請參閱 CMakeSettings.json 參考

當您執行組建時:

  • 如果您是以遠端系統為目標,Visual Studio 會在 [工具>選項>跨平臺> ] 下清單中選擇第一個遠端系統Connection Manager預設為遠端目標。
  • 如果找不到遠端連線,系統會提示您建立一個連線。 如需詳細資訊,請參閱連線到您的遠端 Linux 電腦

選擇 Linux 目標

當您開啟 CMake 專案資料夾時,Visual Studio 會剖析 CMakeLists.txt 檔案,並指定 x86-Debug的 Windows 目標。 若要以遠端 Linux 系統為目標,您將根據 Linux 編譯器變更專案設定。 例如,如果您在 Linux 上使用 GCC 並使用偵錯資訊進行編譯,請選擇: Linux-GCC-DebugLinux-GCC-Release

如果指定遠端 Linux 目標,您的來源會複製到遠端系統。

選取目標之後,CMake 會自動在 Linux 系統上執行,以為您的專案產生 CMake 快取:

Visual Studio 的螢幕擷取畫面,其中顯示 Linux 上產生 CMake 快取的輸出。

目標Windows 子系統 Linux 版

如果您的目標是Windows 子系統 Linux 版 (WSL) ,則不需要新增遠端連線。

若要以 WSL 為目標,請在主要工具列的組態下拉式清單中選取 [管理 組態]:

[CMake 設定] 下拉式清單,其中包含 [管理設定] 選取

CMakeSettings.json視窗隨即出現。

[CMake 設定] 對話方塊,其中醒目提示加號按鈕會新增選取的組態,也就是 Linux-GCC-debug。

[新增設定 ] (綠色的 [+] 按鈕) ,然後在使用 GCC 時選擇 [Linux-GCC-Debug ] 或 [Linux-GCC-Release ]。 如果您使用 Clang/LLVM 工具組,請使用 Clang 變體。 按 [選取 ],然後按 Ctrl+S 儲存設定。

Visual Studio 2019 16.1 版 當您以 WSL 為目標時,Visual Studio 不需要複製來源檔案並維護建置樹狀結構的兩個同步複本,因為 Linux 上的編譯器可以直接存取掛接的 Windows 檔案系統中的來源檔案。

IntelliSense

精確的 C++ IntelliSense 需要存取 C++ 原始程式檔所參考的 C++ 標頭。 Visual Studio 會自動使用 CMake 專案從 Linux 到 Windows 所參考的標頭,以提供完整的 IntelliSense 體驗。 如需詳細資訊,請參閱適用於遠端標頭的 IntelliSense

地區設定

Visual Studio 語言設定不會傳播至 Linux 目標,因為 Visual Studio 不會管理或設定已安裝的套件。 [輸出] 視窗中顯示的訊息,例如建置錯誤,會使用 Linux 目標的語言和地區設定來顯示。 您必須為所需的地區設定設定 Linux 目標。

更多設定

使用下列設定在 Linux 系統上在建置前後,以及在產生 CMake 之前執行命令。 其值可以是遠端系統上任何有效的命令。 輸出會經由管道輸送回 Visual Studio。

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

下一步

設定 CMake 偵錯工作階段

另請參閱

使用專案屬性
自訂 CMake 設定
CMake 預先定義組態參考