如何让Intellisense识别WSL2中的vendor _deps文件夹?
问题描述
在Visual Studio 2022中创建CMake项目并将目标系统切换为WSL: Ubuntu后,通过FetchContent引入第三方依赖(以fmt为例),代码编译运行完全正常,但Windows主机的Intellisense无法识别WSL环境下_deps目录中的头文件,手动复制包含目录的方案不够理想。
问题重现步骤
- 确保已为VS2022安装并配置好WSL2
- 在VS2022中创建新的CMake项目
- 将目标系统改为
WSL: Ubuntu - 在
CMakeLists.txt中添加第三方依赖:
include(FetchContent) FetchContent_Declare( fmt GIT_REPOSITORY https://github.com/fmtlib/fmt.git GIT_TAG 10.1.0 ) FetchContent_MakeAvailable(fmt) target_link_libraries(CMakeProject1 PRIVATE fmt::fmt)
- 生成构建文件
- 在代码中添加依赖相关代码:
#include <fmt/core.h>
fmt::print("Hello, {}!\n", "world");
- Intellisense会报E1696和E0276错误
- 以WSL2为目标编译运行代码,验证代码可正常运行
解决方案
方法1:让Intellisense使用WSL的CMake缓存
- 右键项目根目录的
CMakeLists.txt,选择「CMake设置」 - 在「配置」选项卡中,找到对应
WSL: Ubuntu的配置项 - 将「IntelliSense模式」设置为
linux-x64(匹配你的WSL架构) - 勾选「使用CMake生成的配置作为IntelliSense配置」
- 点击菜单栏「项目」→「CMake缓存」→「生成」,重新生成缓存
方法2:手动添加WSL依赖的映射路径
- 右键项目选择「属性」,打开项目属性窗口
- 导航到「配置属性→C/C++→常规」
- 在「附加包含目录」中添加WSL路径的Windows映射格式,例如:
\\wsl$\Ubuntu\home\<你的用户名>\<项目路径>\_deps\fmt-src\include - 点击「应用」后,通过菜单栏「项目」→「重新加载IntelliSense」生效
方法3:通过CMake显式声明包含目录
修改CMakeLists.txt,在FetchContent_MakeAvailable之后添加显式的包含目录声明,帮助Intellisense识别:
FetchContent_MakeAvailable(fmt) # 显式添加依赖包含目录,辅助Intellisense识别 target_include_directories(CMakeProject1 PRIVATE ${fmt_SOURCE_DIR}/include) target_link_libraries(CMakeProject1 PRIVATE fmt::fmt)
此方式无需修改VS设置,直接通过CMake告知Intellisense依赖位置。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

