无法使用Visual Studio 2015和Clang 3.7与Microsoft CodeGen构建Google Test

Whi*_*sJr 5 c++ clang googletest visual-studio-2015

使用VS 2015及其新的内置clang工具集/项目模板,我无法成功构建Google Test.我收到以下错误:

Error       use of undeclared identifier 'chdir'; did you mean '_chdir'?    
Error       use of undeclared identifier 'fdopen'   
Error       use of undeclared identifier 'read' 
Error       use of undeclared identifier 'write'    
Error       use of undeclared identifier 'close'
Error       use of undeclared identifier 'O_RDONLY' 
Error       use of undeclared identifier 'O_APPEND' 
Error       use of undeclared identifier 'dup'; did you mean '_dup'?
Error       use of undeclared identifier 'creat'; did you mean '_creat'?
Run Code Online (Sandbox Code Playgroud)

我注意到这些声明中的大多数都在这些ANSI检查块中:

#if !__STDC__
...
#endif
Run Code Online (Sandbox Code Playgroud)

是否有项目设置或我可以更改以使这些方法解决?

小智 1

我在使用 chdir 和 freopen 时遇到了类似的问题。

我将只发布我所采取的步骤,以使用 VS2015 和 Clang 启动并运行 googletest。

  • 获取适用于 Windows 的 LLVM 快照构建。 http://llvm.org/builds/
    (确保下载正确的版本(32/64 位))

这将安装最新版本的 clang(在撰写本文时为 v3.9)。请注意,这是一个快照版本,而不是正式版本。

如果您不喜欢快照版本,也许可以尝试最新的发行版本。我没有测试它。我只是喜欢拥有最新的工具,尤其是当它们像 LLVM/Clang 这样快节奏的时候。

  • 安装后,您应该会在 Visual Studio 项目属性中看到条目。 Properties-> General-> Platform Tools-> LLVM-vs2014(以及更多)(切换到LLVM-vs2014

我知道您要求使用带有 Microsoft CodeGen 的 Clang 3.7。你必须自己决定。
此外,我不喜欢对我没有编写或不知道的代码进行一些修复/更改。由于这对我来说效果很好,因此我没有进一步调查该问题。

此时它可能已经适合你了。接下来的步骤描述了构建 googletest 库并将包含目录添加到项目中。

  • 从 github 获取 googletest。 https://github.com/google/googletest

  • 运行 cmake-gui 并配置 googletest 以便能够构建。

    生成器:Visual Studio 14 2015 Win64(我只用了64位,你也可以尝试32位)

来自 llvm 文档
(没有链接,因为没有足够的声誉:clang.llvm.org/docs/MSVCCompatibility.html):

首先,Clang 尝试与 ABI 兼容,这意味着 Clang 编译的代码应该能够成功链接到 MSVC 编译的代码。

  • 使用默认的本机编译器

源代码在哪里:(ex. C:\libs\googletest\googletest
(因为顶层目录下还有googlemock)

在哪里构建二进制文件:(例如C:\libs\googletest\build

  • 取消选中:(BUILD_SHARED_LIBS如果需要,则构建共享库) CMAKE_CONFIGURATION_TYPES:调试和发布(如果愿意,请选择其他)
    记住或更改:(CMAKE_INSTALL_PREFIX例如C:\libs\googletest\install

Python 2.7 是由 cmake 找到的,尽管我很确定它不是必需的。
按“配置”和“生成”。

  • 生成解决方案文件后,转到上面指定的目录(构建二进制文件的位置,例如C:\libs\googletest\build)并打开解决方案 gtest.sln。

  • 选择“调试解决方案配置”并右键单击“ALL_BUILD”和“构建”。完成后,右键单击安装并构建。这将创建之前指定的文件夹。

  • CMAKE_INSTALL_PREFIX(例如C:\libs\googletest\install)在那里,您可能想要更改库名称并添加 *d.lib 以防止文件被覆盖,并作为它是调试版本的指示符。

  • 重复发布解决方案配置的步骤。在CMAKE_INSTALL_PREFIX(例如C:\libs\googletest\install)中,您应该找到一个 include 目录和一个 lib 目录。

  • 在您的项目中,在“属性”->“VC++ 目录”下添加“包含目录”。 CMAKE_INSTALL_PREFIX<b>\include</b>(前任。C:\libs\googletest\install<b>\include</b>

  • 在您的项目中,在“属性”->“VC++ 目录”下添加“库目录”。CMAKE_INSTALL_PREFIX \lib(例如 C:\libs\googletest\install \lib

  • 并在Properties-> Linker-> Input->下Additional Dependencies (gtest.lib / gtestd.lib 取决于您的配置)

之后我就能够构建并运行我的测试。