VS2017跨平台项目中Linux专属头文件的识别问题
嘿,我刚好折腾过VS2017的Linux跨平台项目,遇到过和你一模一样的IntelliSense找不到dirent.h这类Linux头文件的问题,给你详细说下怎么处理:
首先明确回答你:不需要手动在本地添加Linux头文件目录,因为VS的Linux跨平台项目是依赖远程Linux机器上的系统头文件来做IntelliSense索引的,核心是让VS正确同步远程机器的头文件信息。具体步骤如下:
先确认远程Linux连接正常
打开VS的「工具」→「选项」→「跨平台」→「连接管理器」,看看你配置的远程Linux机器是不是处于已连接状态。如果连接有问题,先把连接搞定——毕竟IntelliSense要从远程拉取头文件信息,连接不通一切白搭。触发远程头文件索引同步
右键你的项目,选择「属性」→「配置属性」→「C/C++」→「常规」,找到「远程包含目录」这一项。正常情况下VS会自动填充远程Linux的系统头文件路径(比如/usr/include、/usr/local/include)。如果没看到这些路径,点击「编辑」,再点「从远程机器刷新」按钮,VS会自动去远程机器上拉取所有系统头文件的目录列表,同步完成后IntelliSense应该就能识别dirent.h了。用预编译指令包裹平台专属代码(推荐操作)
虽然现在能识别头文件了,但为了让代码更健壮,也让IntelliSense更清晰区分平台逻辑,建议把Linux专属的头文件和代码用预编译指令包裹起来:#ifdef __linux__ #include <dirent.h> // 这里写你的Linux专属代码逻辑 #endif这样不仅能避免其他平台编译时出错,VS的IntelliSense也能更精准地解析代码。
手动补充远程包含目录(自动同步失败时用)
如果自动刷新还是没搞定,那你可以手动添加远程Linux上的头文件路径到「远程包含目录」里。比如根据你的Linux架构,添加/usr/include或者/usr/include/x86_64-linux-gnu(64位x86架构的Linux常用路径),注意这里填的是远程机器上的绝对路径,不是本地的路径哦。重置IntelliSense缓存(终极小妙招)
有时候VS的IntelliSense缓存会抽风,你可以试试重置:点击「编辑」→「IntelliSense」→「重置本地数据库」,然后重新加载项目,等VS重新完成远程头文件的索引,大概率就能解决问题了。
内容的提问来源于stack exchange,提问作者SeaNick

