Я использую cmake для сборки своего проекта и conan, чтобы установить Google Test в качестве зависимости:
conanfile.txt
[requires]
gtest/1.7.0@lasote/stable
[generators]
cmake
[imports]
bin, *.dll -> ./build/bin
lib, *.dylib* -> ./build/bin
CMakeLists.txt
PROJECT(MyTestingExample)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
INCLUDE(conanbuildinfo.cmake)
CONAN_BASIC_SETUP()
ADD_EXECUTABLE(my_test test/my_test.cpp)
TARGET_LINK_LIBRARIES(my_test ${CONAN_LIBS})
test / my_test.cpp
#include <gtest/gtest.h>
#include <string>
TEST(MyTest, foobar) {
std::string foo("foobar");
std::string bar("foobar");
ASSERT_STREQ(foo.c_str(), bar.c_str()); // working
EXPECT_FALSE(false); // error
}
Сборка
$ conan install --build=missing
$ mkdir build && cd build
$ cmake .. && cmake --build .
Я могу использовать ASSERT_STREQ
, но если я использую EXPECT_FALSE
, я получаю неожиданную ошибку:
my_test.cpp:(.text+0x1e1): undefined reference to `testing::internal::GetBoolAssertionFailureMessage[abi:cxx11](testing::AssertionResult const&, char const*, char const*, char const*)'
collect2: error: ld returned 1 exit status
Что не так с моей конфигурацией?
conaninfo.txt
иCONAN_LIBS
также может быть полезно. - person drodri   schedule 31.12.2016libcxx
несоответствие, из вывода ошибки кажется, что вы должны использоватьlibcxx=libstdc++11
. Если в linux (как правило, а не в среде с несколькими конфигурациями), вы должны использоватьcmake .. -DCMAKE_BUILD_TYPE=Release
, предполагая, что при установке conan использовалась настройка по умолчанию-s build_type=Release
- person drodri   schedule 31.12.2016-DCMAKE_BUILD_TYPE=Release
устраняет эту проблему. - person maiermic   schedule 31.12.2016