无法打开包含文件 - 'gtest.h' - 没有这样的文件或目录

Posted

技术标签:

【中文标题】无法打开包含文件 - \'gtest.h\' - 没有这样的文件或目录【英文标题】:Cannot open include file - 'gtest.h' - No such file or directory无法打开包含文件 - 'gtest.h' - 没有这样的文件或目录 【发布时间】:2012-06-08 08:26:43 【问题描述】:

我正在尝试在 Visual Studio 中构建 gtest,但似乎在获取引用并包含为项目正确指定时遇到了一些问题。

错误 C1083:无法打开包含文件:'gtest/gtest.h':没有这样的文件或目录 c:\gtest-1.6.0\src\gtest-all.cc

1>InitializeBuildStatus:
1>  Touching "Debug\GTestBuild.unsuccessfulbuild".
1>ClCompile:
1>  gtest-all.cc
1>c:\gtest-1.6.0\src\gtest-all.cc(40): fatal error C1083: Cannot open include file: 'gtest/gtest.h': No such file or directory
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.61

对于项目,我在 Project Project Pages > C/C++>Additional Include Directories 列表中添加了对以下内容的引用:

c:\gtest-1.6.0 c:\gtest-1.6.0\src c:\gtest-1.6.0\include c:\gtest-1.6.0\include\gtest

但我似乎遗漏了其他一些包含或可能没有正确设置此功能,并且希望在解决此问题方面提供一些帮助,并为将来学习如何做到这一点。

PS。从

切换
#include "gtest/gtest.h"
// The following lines pull in the real gtest *.cc files.
#include "src/gtest.cc"
#include "src/gtest-death-test.cc"
#include "src/gtest-filepath.cc"
#include "src/gtest-port.cc"
#include "src/gtest-printers.cc"
#include "src/gtest-test-part.cc"
#include "src/gtest-typed-test.cc"

#include <gtest/gtest.h>

// The following lines pull in the real gtest *.cc files.
#include <src/gtest.cc>
#include <src/gtest-death-test.cc>
#include <src/gtest-filepath.cc>
#include <src/gtest-port.cc>
#include <src/gtest-printers.cc>
#include <src/gtest-test-part.cc>
#include <src/gtest-typed-test.cc>

不是解决方案。我已经尝试过了,但它不起作用。

【问题讨论】:

【参考方案1】:

检查完整的编译输出以查看这些包含目录是否被合并到编译中。它应该类似于:

...
-Ic:\gtest-1.6.0 -Ic:\gtest-1.6.0\src -Ic:\gtest-1.6.0\include -Ic:\gtest-1.6.0\include\gtest
...

您是否也查找过这些目录中的文件?不要忘记,当您将其包含在目录中时,您必须在以下目录中查找 gtest.h

c:\gtest-1.6.0\gtest
c:\gtest-1.6.0\src\gtest
c:\gtest-1.6.0\include\gtest
c:\gtest-1.6.0\include\gtest\gtest

(注意gtest 子目录,因为您使用#include "gtest/gtest.h"

【讨论】:

请问如何访问完整的编译输出?我的输出窗口中没有包含的列表。另外,gtest 子目录只存在于 include 文件夹中。 @Kobojunkie:项目选项中应该有一个选项。我不使用VS,所以我不能确切地告诉你它是什么。最终,你必须找到gtest.h。如果它位于上述目录之一中(没有gtest 后缀),那么您所要做的就是从包含中删除目录后缀,使其看起来像#include "gtest.h"。另一方面,如果它不在这些目录中,那么您需要找出它在哪里。查看此链接blog.feabhas.com/2012/03 也表明它可能在c:\gtest-1.6.0\includec:\gtest-1.6.0\include\gtest 链接帮助很大【参考方案2】:

如果您查看文件 gtest-all.cc 的属性页,它的 Additional Include Directories 字段应显示:

..;..\include;%(AdditionalIncludeDirectories)

如果您使用了提供的 msvc\gtest.sln,否则:

C:/gtest-1.6.0/include;C:/gtest-1.6.0;%(AdditionalIncludeDirectories)

如果您使用 CMake 创建 VS 解决方案。

如果该字段为空,则它不会获取您为整个项目设置的目录,因为它们是通过%(AdditionalIncludeDirectories) 变量应用的。如果这种情况,可能值得重新下载并重新开始,因为构建不再处于良好状态。

【讨论】:

就是这个字段不为空。我自己使用系统变量手动添加了引用。 $GTEST_DIR $GTEST_DIR_INCLUDE。我可以确认他们在那里。 那么您是说C:/gtest-1.6.0/include;C:/gtest-1.6.0 在项目 gtest-all.cc(两个单独的属性页)的字段中?如果是这种情况,那么剩下的唯一选择是 C:\gtest-1.6.0\include\gtest\gtest.h 是不可访问的。能不能打开C:\gtest-1.6.0\include\gtest\gtest.h OK?

以上是关于无法打开包含文件 - 'gtest.h' - 没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

testfmwgtestincludegtest/gtest-printers.h(714) : error C2977: “std::tuple”: 模板 参数太多

无法打开包含文件:'ctype.h':没有这样的文件或目录

无法打开包含文件:'ntddk.h':没有这样的文件或目录

Qt无法打开包含文件:'QNetworkAccessManager':没有这样的文件或目录

致命错误 C1083:无法打开包含文件:'io.h':没有这样的文件或目录

无法打开包含文件:'unistd.h':没有这样的文件或目录