2

我有一个使用 Google Test 的 C++11 项目,它在 Linux 中构建得很好。在 Mac 上,我很难将它集成到我的代码库中。问题似乎是,虽然我的代码使用 C++11,但 Google 代码使用 TR1。因此,TR 数据结构的相似性enumunordered_set包含方式不同。

Google 测试示例按照提供的方式完美构建和运行。如果我使用 clang++ 而不是 g++,这些示例也可以构建得很好。(我的代码仅适用于 clang++,所以我使用它来构建。)最后,如果我使用-std=c++11.

但是,如果使用-stdlib=libc++. 它报告它找不到 tr1/tuple,这当然是真的。这是一个问题,因为如果我使用(或没有参数) ,我的代码不会构建。-stdlib=libstdc++stdlib

当然,我可以将所有代码切换到旧标准。然而,这非常令人讨厌。有没有办法让这些代码库在 Mac 上愉快地并存?

我的代码在 Ubuntu 12.04 计算机上使用 g++ 4.6.3 通过 Google 测试构建得非常愉快。mac 运行的是 OSX 10.8.3。它正在运行 g++ 4.2.1 和 clang 4.2++。

感谢您的帮助,大卫

PS:我对 C++ 有点陌生,如果这是一个愚蠢的问题,请原谅我。

编辑:将“OS/X”更改为“OSX”。(是的,我已经那么老了。)

4

1 回答 1

1

您可以指示 Google 测试使用其自己的 tr1::tuple 实现

在 cmake 中,我使用以下行与“旧”编译器一起编译:

add_definitions(-DGTEST_HAS_TR1_TUPLE=0)

我相信你可以将它添加到你的构建系统中,这是一个简单的预处理器定义。

您可以查看include/gtest/internal/gtest-port.h以获得更多选项。GTEST_USE_OWN_TR1_TUPLE 可能有用。大多数参数在默认值下都是正确的。

于 2013-08-21T13:05:22.477 回答