Visual Studio 远程开发 CMake - 重新打开项目时没有任何反应
Visual Studio remote development CMake - nothing happens when reopening the project
我正在使用 Visual Studio 通过 SSH 连接到 docker 容器,以使用 CMake 作为构建系统进行远程开发。
当 Visual Studio 第一次启动项目或 CMakeLists.txt 文件被更改时,Visual Studio 配置,允许我查看、编译和 运行 CMake 目标,以及其他CMake 设置也可以在 UI 中使用(例如 'Project' 下拉菜单中的设置),但是,当重新打开项目时,Visual Studio 似乎没有检测到 CMake 项目或自动重新配置,这意味着没有目标显示因此无法编译,或者如果显示不起作用,并且 UI 中没有显示 CMake 的设置;理论上我可以更新一个 CMakeLists.txt 文件,再次重新启动后可能会导致重新生成,导致 Visual Studio 检测项目,在 UI 中显示与 CMake 相关的目标和一般设置,但是这个不理想,可能导致整个项目需要重新编译。
重现步骤:
- 在 Visual Studio 2022 年创建 C++ CMake 项目
- 运行 Docker 容器并在 Visual Studio 选项中添加 SSH 连接信息
- 将CMakeSettings.json中的默认'x64-Debug'替换为'Linux-GCC-Debug'
- 等待自动生成 CMake 或在弹出窗口上按生成“C++ IntelliSense 信息可能已过时,生成 CMake 缓存以刷新..”
- 现在一切正常; “Select 启动项”菜单按钮应该对 select 可用,编译并执行从 CMakeLists.txt 文件指定的 target/s。其他 CMake 按钮现在应该可用,(例如项目 -> 配置缓存)
- 退出Visual Studio
- 在Visual Studio
中再次打开项目
- 似乎没有恢复工作状态的方法,Visual Studio 不再知道 CMake 目标,我们无法再编译该项目,也 运行 它。似乎无法使 Visual Studio 在 UI 中重新配置。现有目标可能会出现,但不再有效。
然后我按照远程缓存教程进行操作:https://devblogs.microsoft.com/cppblog/open-existing-cmake-caches-in-visual-studio/
执行以下步骤:
- 将配置 'Linux-GCC-Debug' 替换为 'Existing Cache (Remote)'
- 将 cacheRoot 更新为远程系统上包含 CMakeCache.txt 的路径
重新生成弹出窗口显示(“C++ IntelliSense 信息可能已过期,生成 CMake 缓存以刷新..”),第一次按重新生成有效,但随后重新打开项目导致没有任何反应再次。没有可供选择的目标/可执行文件。
本地 MSVC CMake 项目不会出现此问题,可用目标始终在重新启动时立即显示,以及 UI 中可用的所有其他项目设置。
这是 Visual Studio 中的一个错误,还是我遗漏了一些东西,以至于 Visual Studio 总是使用现有的缓存来配置自身以使目标可用于编译和执行,每当我启动现有项目时?
IDE 通常如何检测 CMake 目标,也许知道这可以为解决问题提供提示。
Visual Studio版本:17.0.5
Docker 文件:
FROM ubuntu:21.04
ENV DEBIAN_FRONTEND="noninteractive"
RUN apt update && apt install build-essential gdb rsync zip openssh-server sudo cmake ninja-build -y
RUN echo "root:dev" | chpasswd
RUN echo "AllowUsers root" >> /etc/ssh/sshd_config
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN service ssh start
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
这是 Visual Studio 2022 中的一个已知错误 - https://developercommunity2.visualstudio.com/t/VS-2022-cant-reopen-cmake-project-on-re/1591862?entry=problem
尝试更新到最新版本或降级到 Visual Studio 2019。
我正在使用 Visual Studio 通过 SSH 连接到 docker 容器,以使用 CMake 作为构建系统进行远程开发。 当 Visual Studio 第一次启动项目或 CMakeLists.txt 文件被更改时,Visual Studio 配置,允许我查看、编译和 运行 CMake 目标,以及其他CMake 设置也可以在 UI 中使用(例如 'Project' 下拉菜单中的设置),但是,当重新打开项目时,Visual Studio 似乎没有检测到 CMake 项目或自动重新配置,这意味着没有目标显示因此无法编译,或者如果显示不起作用,并且 UI 中没有显示 CMake 的设置;理论上我可以更新一个 CMakeLists.txt 文件,再次重新启动后可能会导致重新生成,导致 Visual Studio 检测项目,在 UI 中显示与 CMake 相关的目标和一般设置,但是这个不理想,可能导致整个项目需要重新编译。
重现步骤:
- 在 Visual Studio 2022 年创建 C++ CMake 项目
- 运行 Docker 容器并在 Visual Studio 选项中添加 SSH 连接信息
- 将CMakeSettings.json中的默认'x64-Debug'替换为'Linux-GCC-Debug'
- 等待自动生成 CMake 或在弹出窗口上按生成“C++ IntelliSense 信息可能已过时,生成 CMake 缓存以刷新..”
- 现在一切正常; “Select 启动项”菜单按钮应该对 select 可用,编译并执行从 CMakeLists.txt 文件指定的 target/s。其他 CMake 按钮现在应该可用,(例如项目 -> 配置缓存)
- 退出Visual Studio
- 在Visual Studio 中再次打开项目
- 似乎没有恢复工作状态的方法,Visual Studio 不再知道 CMake 目标,我们无法再编译该项目,也 运行 它。似乎无法使 Visual Studio 在 UI 中重新配置。现有目标可能会出现,但不再有效。
然后我按照远程缓存教程进行操作:https://devblogs.microsoft.com/cppblog/open-existing-cmake-caches-in-visual-studio/
执行以下步骤:
- 将配置 'Linux-GCC-Debug' 替换为 'Existing Cache (Remote)'
- 将 cacheRoot 更新为远程系统上包含 CMakeCache.txt 的路径
重新生成弹出窗口显示(“C++ IntelliSense 信息可能已过期,生成 CMake 缓存以刷新..”),第一次按重新生成有效,但随后重新打开项目导致没有任何反应再次。没有可供选择的目标/可执行文件。
本地 MSVC CMake 项目不会出现此问题,可用目标始终在重新启动时立即显示,以及 UI 中可用的所有其他项目设置。
这是 Visual Studio 中的一个错误,还是我遗漏了一些东西,以至于 Visual Studio 总是使用现有的缓存来配置自身以使目标可用于编译和执行,每当我启动现有项目时? IDE 通常如何检测 CMake 目标,也许知道这可以为解决问题提供提示。
Visual Studio版本:17.0.5
Docker 文件:
FROM ubuntu:21.04
ENV DEBIAN_FRONTEND="noninteractive"
RUN apt update && apt install build-essential gdb rsync zip openssh-server sudo cmake ninja-build -y
RUN echo "root:dev" | chpasswd
RUN echo "AllowUsers root" >> /etc/ssh/sshd_config
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN service ssh start
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
这是 Visual Studio 2022 中的一个已知错误 - https://developercommunity2.visualstudio.com/t/VS-2022-cant-reopen-cmake-project-on-re/1591862?entry=problem
尝试更新到最新版本或降级到 Visual Studio 2019。