有一说一,这个报错我不是第一次遇到了。刚开始我还真有点懵,
fatal error C1083: Cannot open include file
,看着好像是个很严重的问题,其实多数时候是编译器找不到你需要的头文件,换句话说,就是“你没告诉它去哪找”。
第一次遇到这事,是我把一个旧项目迁到新的目录里重新编译,然后直接就弹了个 C1083。文件路径死活对不上,结果发现问题出在“附加包含目录”没配置。
第二次遇到它,是我把编译模式从 Debug 切换到 Release。Debug 下路径好好的,一换 Release 就又爆红……于是这次我干脆记一下完整的处理过程,下次直接翻笔记,再也不瞎找。
最关键的一步是:你要确认那个出错的头文件,编译器到底在哪没找到。
具体做法是:
第一步,先看报错信息里提到的文件,比如:
fatal error C1083: Cannot open include file: 'xxx.h': No such file or directory
然后你定位到这个 xxx.h
是在哪个目录下的,比如是 ProjectRoot/inc/xxx.h
。
第二步,打开项目属性页。这一步不能偷懒,别想着直接改代码里的 #include
,那不是根治。
右键项目 → 属性(最后一项),如图所示:
点进去之后,左侧选中:
mathematic
配置属性 → C/C++ → 常规
然后找到右边的“附加包含目录”,如下图:
第三步,在这个“附加包含目录”里,把你的 inc
目录加进去。
这里建议不要写死绝对路径,比如:
D:\workspace\myproject\inc
这样写换个电脑就全废了。建议用工程相对路径,比如:
$(ProjectDir)inc
这个变量是 Visual Studio 自带的,代表你项目文件所在的根目录,后面加子目录就行。
路径多个的时候,用分号 ;
隔开。
如果你发现 Debug 模式可以编译,但 Release 不行,那你就要检查当前选中的“配置”和“平台”是不是对的:
-
配置:Debug / Release
-
平台:Win32 / x64
你加路径的时候,是加在当前选中的配置和平台上生效的,不是全局的。
可以点一下右上角的“配置管理器”统一设置,别 Debug 加了 Release没加,到时候还得再来一次。
搞定之后重新生成项目,基本这个 C1083 报错就不会再来了。
顺便一提,如果你路径都配好了,还是报找不到,有时候是文件名拼错了。windows 下大小写无所谓,但有些第三方库解压出来文件名不一定对,别看漏了。
再一个常见坑是你 include 的路径写得不规范,比如你写了 #include "inc/xxx.h"
,结果路径已经包含 inc
了,实际变成 inc/inc/xxx.h
,肯定找不到。
总之,这种报错本质是路径配置问题,不复杂,就是细节容易搞错。改好之后编译器就老实了