2016-12-31 1 views
1
내 프로젝트를 빌드 할 cmake를 사용

conan을 종속성으로 Google Test를 설치 :는 gtest 코난 설치 : 테스트 '에 대한 정의되지 않은 참조 : 내부 : GetBoolAssertionFailureMessage`

conanfile.txt

[requires] 
gtest/[email protected]/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}) 

테스트/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 

무슨 잘못을 내 구성? ,

$ conan install --build=missing 
# equivalent to 
$ conan install -s build_type=Release ... --build=missing 

기본 설정

그런 다음 conan.conf 파일에서 볼 수있다 :

+0

하는 OS와에서 컴파일러 (버전 포함)를 실행하고 있습니까? ''conaninfo.txt''와''CONAN_LIBS''의 내용도 유용 할 것입니다. – drodri

+1

"libcxx"불일치 일 수 있습니다. 오류 출력에서''libcxx = libstdC++ 11''을 사용해야합니다. 리눅스에서 (일반적으로 다중 설정 환경이 아닌) conan install이 기본 설정''-s build_type = Release''을 사용했다고 가정하면''cmake .. -DCMAKE_BUILD_TYPE = Release'를 사용해야합니다. – drodri

+0

고맙습니다. '-DCMAKE_BUILD_TYPE = Release'이이 문제를 해결합니다. – maiermic

답변

3

문제는 (유형 을 출시을 구축입니다) 기본 설정을 사용하여 코난 종속성을 설치하는 것입니다 당신은 nake 시스템에서 기본 빌드 타입이 인 디버그을 사용하고 있습니다. 이것은 단일 conf 환경입니다 (Visual Studio와 같이 다중 구성 디버그/릴리스 환경에 반대 됨). 그래야 할 때 :

$ cmake .. && cmake --build . 
# equivalent to 
$ cmake .. -DCMAKE_BUILD_TYPE=Debug && cmake --build . 

디버그/릴리스 빌드의 비 호환성으로 인해 해결되지 않은 문제가 발생합니다. 그래서 솔루션이 설치된 종속성을 일치 같은 빌드 타입을 사용하는 것입니다 :

$ cmake .. -DCMAKE_BUILD_TYPE=Release && cmake --build . 

비주얼 스튜디오와 같은 다중 구성 환경을 사용하는 경우, 올바른 방법은 다음과 같습니다

$ cmake .. && cmake --build . --config Release 
+0

답변 해 주셔서 감사합니다. @maiermic의 특정 예제를 위해 저에게도 도움이되지만 다른 assert를 사용하면 여전히 정의되지 않은 참조가 표시됩니다 (예 :'ASSERT_TRUE ("hi"== "hallo")). ;)'. 다른 주장 유형도 시도 했습니까? – erikzenker

+1

이것은 이상하게도 작동하지만 다른 하나는 작동하지 않습니다. 어쩌면 자세한 출력과 파일을 가지고 자체 질문을 할 수도 있고, 패키지 저자 레포 (https : // github)에 문제를 제출할 수도 있습니다.com/lasote/conan-gtest (사용중인 패키지 인 경우) – drodri

+0

다음 질문을 시작했습니다. http://stackoverflow.com/questions/42162014/gtest-installed-with-conan-undefined-reference 또한 열었습니다. lasote https://github.com/lasote/conan-gtest/issues/20의 레포에 관한 문제 – erikzenker

관련 문제