在 Visual Studio 中設定 Linux CMake 專案
Visual Studio 2017 及更新版本支援 Linux。 若要查看這些版本的檔案,請將位於 Visual Studio 2017 或 Visual Studio 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。 或者,在 方案總管 中以滑鼠右鍵按兩下CMakeLists.txt,然後選擇 [變更 CMake 設定]。 Visual Studio 接著會在根項目資料夾中建立新的 CMakeSettings.json 檔案。 若要進行變更,請開啟檔案並直接修改。 如需詳細資訊,請參閱自訂 CMake 設定。
Visual Studio 2017 中 Linux 偵錯的預設組態(以及 Visual Studio 2019 16.0 版)看起來如下:
{
"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 會在 [工具>選項>跨平臺>] 下選擇清單中的第一個遠端系統 連線管理員 預設為遠端目標。
- 如果找不到遠端連線,系統會提示您建立一個。 如需詳細資訊,請參閱連線到您的遠端 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 目標。
更多設定
使用下列設定,在建置之前和建置之後,以及在 CMake 產生之前,在 Linux 系統上執行命令。 其值可以是遠端系統上任何有效的命令。 輸出會經由管道輸送回 Visual Studio。
{
"remotePrebuildCommand": "",
"remotePreGenerateCommand": "",
"remotePostbuildCommand": "",
}