添加 Linux 配置
配置可用于针对具有相同源代码的不同平台(Windows、WSL、远程系统)。 配置还可用于设置编译器、传递环境变量以及自定义 CMake 的调用方式。 CMakeSettings.json 文件指定在自定义 CMake 设置中列出的部分或所有属性,以及控制远程 Linux 计算机上的生成设置的其他属性。
若要在 Visual Studio 2019 或更高版本中更改默认 CMake 设置,请在主工具栏中打开“配置”下拉列表,然后选择“管理配置” 。
此命令将打开“CMake 设置编辑器”,可使用它来编辑根项目文件夹中的 CMakeSettings.json 文件。 还可通过单击“CMake 设置”对话框右上角的“编辑 JSON”按钮,使用 JSON 编辑器打开文件。
Visual Studio 2019 版本 16.1 中的默认 Linux 调试配置如下所示:
JSON复制
{
"configurations": [
{
"name": "Linux-GCC-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"cmakeExecutable": "cmake",
"remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ],
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "linux_x64" ],
"remoteMachineName": "1234567890;192.168.1.1 (username=root, port=22, authentication=Password)",
"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)。
选择 Linux 目标
打开 CMake 项目文件夹时,Visual Studio 会分析 CMakeLists.txt 文件,并指定 Windows 目标“x86-Debug”。 要以远程 Linux 系统为目标,请根据 Linux 编译器更改项目设置。 例如,如果在 Linux 上使用 GCC 并使用调试信息进行编译,则选择:“Linux-GCC-Debug”或“Linux-GCC-Release”。
如果指定远程 Linux 目标,则会将源复制到远程系统。
选择目标后,CMake 会在 Linux 系统上自动运行,以便为项目生成 CMake 缓存:
针对远程项目和 WSL 的 Launch.vs.json 参考
在 Visual Studio 2019 版本 16.6 中,我们添加了一个 type: cppgdb
的新调试配置,用于在远程系统和 WSL 上简化调试。 仍支持 type: cppdbg
的旧调试配置。
配置类型 cppgdb
name
:用于在“启动项”下拉菜单中标识配置的易记名称。project
:指定项目文件的相对路径。 通常,调试 CMake 项目时不需要更改此路径。projectTarget
:指定在生成项目时要调用的 CMake 目标。 如果从“调试菜单”或“目标视图”输入 launch.vs.json,则 Visual Studio 会自动填充此属性。 此目标值必须与“启动项”下拉菜单中列出的现有调试目标的名称匹配。debuggerConfiguration
:指示要使用的一组调试默认值。 在 Visual Studio 2019 版本 16.6 中,唯一有效的选项是gdb
。 Visual Studio 2019 版本 16.7 或更高版本也支持gdbserver
。args
:在启动时传递给所调试的程序的命令行自变量。env
:传递给所调试的程序的其他环境变量。 例如{"DISPLAY": "0.0"}
。processID
:要附加到的 Linux 进程 ID。 仅当附加到远程进程时才使用。
gdb
配置的其他选项
program
:默认为"${debugInfo.fullTargetPath}"
。 要调试的应用程序的 Unix 路径。 仅当与生成或部署位置中的目标可执行文件不同时才需要。remoteMachineName
:默认为"${debugInfo.remoteMachineName}"
。 承载要调试的程序的远程系统的名称。 仅当与生成系统不同时才需要。 必须在连接管理器中具有现有条目。 按 Ctrl+空格键可查看所有现有远程连接的列表。cwd
:默认为"${debugInfo.defaultWorkingDirectory}"
。 远程系统上运行program
的目录的 Unix 路径。 目录必须存在。gdbpath
:默认为/usr/bin/gdb
。 用于调试的gdb
的完整 Unix 路径。 仅当使用gdb
的自定义版本时才需要。preDebugCommand
:恰好在调用gdb
之前运行的 Linux 命令。gdb
在该命令完成之前不会启动。 可以使用该选项在执行gdb
之前运行脚本。
{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "cppgdb",
"name": "CMakeLists.txt",
"project": "CMakeLists.txt",
"projectTarget": "",
"comment": "了解如何配置远程调试。有关详细信息,请参阅 http://aka.ms/vslinuxdebug",
"debuggerConfiguration": "gdb",
"processId": "0"
}
]
}
参考链接: