无法打开包含文件 - '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\include
或c:\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”: 模板 参数太多
Qt无法打开包含文件:'QNetworkAccessManager':没有这样的文件或目录