有一说一,这个报错我不是第一次遇到了。刚开始我还真有点懵,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 目录加进去。 这里建议不要写死绝对路径,比如: makefile D:\workspace\myproject\inc 这样写换个电脑就全废了。建议用工程相对路径,比如: javascript $(ProjectDir)inc 这个变量是 Visual Studio 自带的,代表你项目文件所在的根目录,后面加子目录就行。 路径多个的时候,用分号 ; 隔开。 如果你发现 Debug 模式可以编译,但 Release 不行,那你就要检查当前选中的“配置”和“平台”是不是对的: 配置:Debug / Release 平台:Win32 / x64 你加路径的时候,是加在当前选中的配置和平台上生效的,不是全局的。 可以点一下右上角的“配置管理器”统一设置,别 Debug 加了 Release没加,到时候还得再来一次。 搞定之后重新生成项目,基本这个 C1083 报错就不会再来了。 顺便一提,如果你路径都配好了,还是报找不到,有时候是文件名拼错了。Windows 下大小写无所谓,但有些第三方库解压出来文件名不一定对,别看漏了。 再一个常见坑是你 include 的路径写得不规范,比如你写了 #include "inc/xxx.h",结果路径已经包含 inc 了,实际变成 inc/inc/xxx.h,肯定找不到。 总之,这种报错本质是路径配置问题,不复杂,就是细节容易搞错。改好之后编译器就老实了
有一说一,这个报错我不是第一次遇到了。刚开始我还真有点懵,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 目录加进去。 这里建议不要写死绝对路径,比如: makefile D:\workspace\myproject\inc 这样写换个电脑就全废了。建议用工程相对路径,比如: javascript $(ProjectDir)inc 这个变量是 Visual Studio 自带的,代表你项目文件所在的根目录,后面加子目录就行。 路径多个的时候,用分号 ; 隔开。 如果你发现 Debug 模式可以编译,但 Release 不行,那你就要检查当前选中的“配置”和“平台”是不是对的: 配置:Debug / Release 平台:Win32 / x64 你加路径的时候,是加在当前选中的配置和平台上生效的,不是全局的。 可以点一下右上角的“配置管理器”统一设置,别 Debug 加了 Release没加,到时候还得再来一次。 搞定之后重新生成项目,基本这个 C1083 报错就不会再来了。 顺便一提,如果你路径都配好了,还是报找不到,有时候是文件名拼错了。Windows 下大小写无所谓,但有些第三方库解压出来文件名不一定对,别看漏了。 再一个常见坑是你 include 的路径写得不规范,比如你写了 #include "inc/xxx.h",结果路径已经包含 inc 了,实际变成 inc/inc/xxx.h,肯定找不到。 总之,这种报错本质是路径配置问题,不复杂,就是细节容易搞错。改好之后编译器就老实了