2013-06-18 8 views
2

У меня есть проект C++ 11, который использует Google Test, и он отлично работает в Linux. На Mac мне больше сложно интегрировать его в мою базу кода. Проблема заключается в том, что, хотя мой код использует C++ 11, в коде Google используется TR1. В результате структуры данных TR, такие как enum и unordered_set, включены по-разному.Объединение C++ 11 и TR1-зависимого кода в OSX?

Образцы Google Test строят и работают идеально, как предусмотрено. Образцы также строят просто отлично, если я использую clang ++ вместо g ++. (Мой код работает только на clang ++, поэтому я использую его для сборки.) Наконец, код Google также строит и запускает, если я использую -std=c++11.

Однако, тест Google не построить с помощью clang ++ на моем mac, если я использую -stdlib=libc++. Он сообщает, что он не может найти tr1/кортеж, что, конечно, верно. Это проблема, потому что мой код не строится, если я использую -stdlib=libstdc++ (или нет аргумента stdlib).

Конечно, я мог бы переключить весь свой код на более старый. Это, однако, чрезвычайно yuck. Есть ли способ заставить эти базы кода жить счастливо бок о бок на Mac?

Мой код успешно работает с тестом Google с использованием g ++ 4.6.3 на компьютере Ubuntu 12.04. Mac работает под управлением OSX 10.8.3. Он работает g ++ 4.2.1 и clang 4.2 ++.

Спасибо за любую помощь, Дэвид

PS: Я несколько новых для C++, так что простите меня, если это глупый вопрос.

Редактировать: Изменено «OS/X» на «OSX». (Да, я что старый.)

+1

Какие компиляторы и какие версии вы используете на MacOSX? Я считаю, что если вы построили GCC 4.8 на своем Mac, он скомпилирует ваш код, а также Linux! Большинство Linux сегодня имеют более новый GCC, чем 4.2! –

+0

Базиле, это было! Спасибо. –

ответ

1

Вы можете поручить проверку Google, чтобы использовать свою собственную реализацию TR1 :: кортеж

В CMake я использую следующую строку компиляции со «старыми» компиляторов:

add_definitions(-DGTEST_HAS_TR1_TUPLE=0) 

Я уверен, что вы можете добавить его в свою систему сборки, это простое определение препроцессора.

Дополнительную информацию вы можете найти на странице include/gtest/internal/gtest-port.h. Может быть полезно использовать GTEST_USE_OWN_TR1_TUPLE. Большинство параметров соответствуют значениям по умолчанию.