VSCode通过WSL:Ubuntu打开文件夹时忽略C++标准,如何修改默认标准?
解决WSL:Ubuntu下VSCode默认C++标准被忽略的问题
一、修改所有WSL项目默认C++标准的方法
1. 配置WSL远程VSCode用户设置
VSCode的本地Windows设置和WSL远程设置相互独立,你之前修改的是本地用户设置,不会自动同步到WSL环境。操作步骤:
- 连接到WSL:Ubuntu后,按下
Ctrl+,打开设置界面; - 点击界面右上角的打开远程设置图标(或搜索"Remote: WSL"筛选远程相关设置);
- 在远程用户设置中添加以下配置:
保存后,所有通过WSL打开的项目都会默认使用这个配置。"C_Cpp.default.cppStandard": "c++17", "code-runner.executorMap": { "cpp": "cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" }
2. 设置WSL系统级g++默认标准
如果希望终端和VSCode中所有g编译都默认使用C17,可以修改shell配置文件:
- 打开WSL终端,编辑
~/.bashrc(若使用zsh则编辑~/.zshrc):nano ~/.bashrc - 在文件末尾添加别名:
alias g++='g++ -std=c++17' - 执行以下命令使配置生效:
source ~/.bashrc
3. 检查工作区配置的优先级
如果某个项目下存在c_cpp_properties.json或tasks.json,其中的配置会覆盖用户设置:
- 打开项目的
.vscode/c_cpp_properties.json,确保cppStandard字段为"c++17"; - 若使用tasks.json编译,确认编译命令中包含
-std=c++17参数。
二、Windows与WSL环境的差异原因
- VSCode设置隔离:VSCode的本地环境和WSL远程环境拥有独立的设置存储,你在Windows本地修改的用户设置仅对本地打开的项目生效,WSL环境会加载自己的用户配置文件(位于WSL文件系统的
~/.vscode-server/data/Machine/settings.json)。 - 编译器版本与默认标准不同:Windows下你使用的编译器(如MinGW、MSVC)默认标准可能已设为C17,而WSL中的gcc/g版本可能较低(例如gcc 6.x及以下默认C++14),即使未指定标准,也会使用编译器的默认值。
内容的提问来源于stack exchange,提问作者Tariq Soliman
相关产品推荐
相关产品推荐

