在 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 設定編輯器,您可用來編輯根專案資料夾中的 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-Debug 或 Linux-GCC-Release。
如果指定遠端 Linux 目標,您的來源會複製到遠端系統。
選取目標之後,CMake 會自動在 Linux 系統上執行,以為您的專案產生 CMake 快取:
目標Windows 子系統 Linux 版
如果您的目標是Windows 子系統 Linux 版 (WSL) ,則不需要新增遠端連線。
若要以 WSL 為目標,請在主要工具列的組態下拉式清單中選取 [管理 組態]:
CMakeSettings.json視窗隨即出現。
按 [新增設定 ] (綠色的 [+] 按鈕) ,然後在使用 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": "",
}