我开始在大学担任研究员,并被指示使用内部框架为已经存在的用C++编写的应用程序开发组件,该框架也是用C++开发的。
目前,我正在努力在Visual Studio 2017中正确设置项目。每当我尝试从框架中包含一个文件时,IntelliSense都会抱怨无法打开该文件。
然而,以下事情增加了问题的奇怪性:
-
解决方案属性设置正确;项目确实在没有任何抱怨的情况下构建。
-
在编写"#include"指令时,IntelliSense确实建议头文件的正确相对路径(即
#include <framework/class.h>
(。 -
我可以使用'open Document"class.h">'对话框从引用它的源文件中打开头文件。
我已经遇到了这个:
- IntelliSense:无法打开包含路径中的源文件
- Intellisense无法打开源文件"*"。h〃
到目前为止,没有任何东西能解决我的问题。有人遇到这个问题了吗?
TL;DR
- 一切都很好
- "C/C++->常规->其他包含目录"设置正确
- 还设置了"VC++目录->包含目录">
- 在编写include指令时,IntelliSense正确地建议头文件
- 但是据报道IntelliSense无法打开文件,因此无法对其进行索引
- 我被一个花哨但资源匮乏的文本编辑器卡住了
编辑:
我正在开发MacBook"13 2016;通过Bootcamp安装了Windows 10 Pro 64位。
出现此问题是因为Windows现在可以选择区分文件夹大小写,而intellisense有更改尝试打开的文件大小写的习惯。
Intellisense尝试使用类似C:\WORKSPACEPATH\PROJECTDIR\MYFILE.cpp的路径(即全部大写(,但如果C:\workspace(或路径中的任何其他目录(设置为区分大小写并且不完全匹配,则找不到它。
在我的情况下,这是因为我通过WSL创建了文件夹,默认情况下,WSL在它创建的任何新目录上都启用了区分大小写功能(包括通过git clone
等方式(。参见此处
轻松修复
这可以通过运行以下程序来修复:
fsutil file setCaseSensitiveInfo <directory> disable
更多命令
您可以通过运行来检查文件夹是否启用了区分大小写功能
fsutil file queryCaseSensitiveInfo <directory>
最后,一个方便的一行代码可以递归地禁用它:
for /r /d %f in (.) do (fsutil file setCaseSensitiveInfo %f disable)
(这条信息最初是作为对原始问题的评论发布的,后来发现它实际上是同一个问题。请参阅其他几个人的评论(
对于在Visual Studio 2022中打开的一个Linux项目,我尝试了@yothsoggoth的公认答案,这对我来说很有意义,但不幸的是没有成功
我意识到visual studio甚至无法使用F12从标准库打开C++文件,但它可以从其他库打开其他文件
因此,在我的情况下,解决方案是关闭visualstudio,备份用作缓存的文件夹。C:Users[user]AppDataLocalMicrosoftLinux
到C:Users[user]AppDataLocalMicrosoftLinux.bak
然后我重新打开Visual Studio,让CMake重新生成缓存
错误现在已经消失,我现在甚至可以用F12从C++std库打开<string>
和其他。
我希望这个解决方法能帮助其他
我在Visual Studio代码及其Intellisense C++扩展在交叉编译环境中工作时也遇到了类似的问题(使用SysGCC(。
VS代码IntelliSense插件找不到源文件。我使用了"fsutil"-ed的"C:\SysGCC…"并且签出源目录是"区分大小写"的(以避免与Linux区分大小写文件的命名冲突(。因此,使用"fsutils"关闭目录的区分大小写功能也会有所帮助。
(根据VSCode CppTools和"区分大小写"的结账,他们也有一个选项C_Cpp.aseSentiveFileSupport。(