Visual Studio 2022中CMakePresets.json等文件被默认内容覆盖问题
问题描述
在Visual Studio 2022中编辑CMakePresets.json或CMakeUserPresets.json并保存后,文件会被默认内容自动覆盖;使用VS Code等其他编辑器修改时,更改可以正常保留,但一旦用VS2022打开该CMake工程,文件就会还原为修改前的状态。已在VS2022中设置优先使用CMakePresets.json(无此文件时才使用CMakeSettings.json)。
复现步骤
- 打开Visual Studio 2022,导入一个无
CMakePresets.json的CMake项目:VS会自动生成该文件,但关闭后重新打开项目,就无法再修改这个文件。 - 在VS2022内修改
CMakePresets.json或CMakeUserPresets.json。 - 保存文件。
- 观察到文件内容被默认配置覆盖。
即使关闭并重启Visual Studio 2022,该问题仍然存在。
环境信息
- IDE:Visual Studio 2022 版本17.6.5
- CMake版本:3.31.0
- 操作系统:Windows 11
解决方案
1. 关闭VS2022的自动生成CMakePresets.json功能
打开VS2022的「工具」→「选项」→「CMake」→「常规」,取消勾选“自动生成CMakePresets.json”选项。该选项会在项目启动时自动覆盖现有预设文件。
2. 检查文件写入权限
右键点击CMakePresets.json或CMakeUserPresets.json,选择「属性」→「安全」,确认当前用户拥有写入权限。若VS以管理员身份运行,可能会导致普通用户权限下的修改无法保存。
3. 清理项目缓存
删除项目目录下的.vs、build、out等缓存文件夹,这些目录可能存储了旧的预设配置,导致VS打开时自动还原文件。清理后手动创建并编辑CMakePresets.json,避免VS自动生成默认内容。
4. 降级CMake版本
CMake 3.31.0属于较新版本,可能与VS2022 17.6.5存在兼容性问题。尝试降级到与VS版本匹配的稳定版本(如CMake 3.28.x或3.26.x)。
5. 自定义CMakeSettings.json指定预设
在项目根目录创建CMakeSettings.json,明确指定使用自定义预设,避免VS自动生成覆盖:
{ "configurations": [ { "name": "CustomPreset", "cmakePreset": "YourDefinedPresetName", "inheritEnvironments": ["msvc_x64"] } ] }
内容的提问来源于stack exchange,提问作者Mehran Khazaeizadeh

