C++ 如何通过柯南使用gtest

C++ 如何通过柯南使用gtest,c++,cmake,googletest,conan,C++,Cmake,Googletest,Conan,我现在正在学习柯南。作为一个实践项目,我想创建一个包含单元测试的库(我很清楚,在gtest中使用conan不是最有用的,但这只是一个示例) 我的项目目录: 建造 垃圾箱 阵列测试 src Array.hpp 测验 数组_tests.cpp conanfile.txt CMakeLists.txt 我的conanfile.txt [requires] gtest/1.10.0 [generators] cmake My CMakeLists.txt: cmake_minim

我现在正在学习柯南。作为一个实践项目,我想创建一个包含单元测试的库(我很清楚,在gtest中使用conan不是最有用的,但这只是一个示例)

我的项目目录:

  • 建造
    • 垃圾箱
      • 阵列测试
  • src
    • Array.hpp
  • 测验
    • 数组_tests.cpp
  • conanfile.txt
  • CMakeLists.txt
我的conanfile.txt

[requires]
gtest/1.10.0

[generators]
cmake
My CMakeLists.txt:

cmake_minimum_required(VERSION 3.5)
project(ralib)
enable_testing()

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

add_library(ralib INTERFACE)

add_executable(array_tests tests/array_tests.cpp)
target_link_libraries(array_tests ${CONAN_LIBS})


add_test(NAME array_tests WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin COMMAND array_tests)
My array_tests.cpp:

#include <gtest/gtest.h>
#include <iostream>

TEST(Array, test){
    std::cout << "g" << std::endl;
    EXPECT_EQ(1, 1);
}
执行数组_测试时出错

munmap_chunk(): invalid pointer
Aborted (core dumped)
生成

./bin/array_tests
conan install .. && cmake .. && cmake --build . -- -j8 && ctest
输出:

Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=gcc
compiler.libcxx=libstdc++
compiler.version=7
os=Linux
os_build=Linux
[options]
[build_requires]
[env]

conanfile.txt: Installing package
Requirements
    gtest/1.10.0 from 'conan-center' - Cache
Packages
    gtest/1.10.0:4a8c5b4cd3b4d45b83fff85d53160ea02ae5fa2d - Cache

Installing (downloading, building) binaries...
gtest/1.10.0: Already installed!
conanfile.txt: Generator cmake created conanbuildinfo.cmake
conanfile.txt: Generator txt created conanbuildinfo.txt
conanfile.txt: Generated conaninfo.txt
conanfile.txt: Generated graphinfo
-- Conan: Adjusting output directories
-- Conan: Using cmake global configuration
-- Conan: Adjusting default RPATHs Conan policies
-- Conan: Adjusting language standard
-- Current conanbuildinfo.cmake directory: /home/domane/dev/dlr/ravis/ralib/build
-- Conan: Compiler GCC>=5, checking major version 7
-- Conan: Checking correct version: 7
-- Configuring done
-- Generating done
-- Build files have been written to: /home/domane/dev/dlr/ravis/ralib/build
Scanning dependencies of target array_tests
[ 50%] Building CXX object CMakeFiles/array_tests.dir/tests/array_tests.cpp.o
[100%] Linking CXX executable bin/array_tests
[100%] Built target array_tests
Test project /home/domane/dev/dlr/ravis/ralib/build
    Start 1: array_tests
1/1 Test #1: array_tests ......................***Exception: Child aborted  0.02 sec

0% tests passed, 1 tests failed out of 1

Total Test time (real) =   0.02 sec

The following tests FAILED:
          1 - array_tests (Child aborted)
Errors while running CTest
有什么提示说明为什么这不起作用吗


我通过target_link_库添加gtest_main没有帮助

似乎有两种不同的解决方案

首先,您可以将conan设置为使用libstdc++11

这里也回答了这个问题:

文档中有一个警告:

当第一次初始化默认配置文件时,您可能也会看到此警告

默认值是libstdc++,因为它也与旧发行版广泛兼容。您需要使用以下命令将默认值更改为
libstdc++11

$ conan profile update settings.compiler.libcxx=libstdc++11 default

对我来说,即使gtest conan软件包得到了
no_main=False
,我也必须手动将
main.cpp
文件添加到我的测试文件夹中以使其工作

main.cpp
文件的内容:

#include <gtest/gtest.h>

int main(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
#包括
int main(int argc,字符**argv)
{
测试:InitGoogleTest(&argc,argv);
返回运行所有测试();
}

您的环境有一些问题。Gtest包工作正常,我刚刚将您的示例添加到存储库:,日志:。请打开一个问题以获得更多帮助。谢谢。我在Ubuntu 18.04 Windows子系统中工作。我将尝试将代码推送到gitlab ci以复制您的结果。发现错误。我忘了更新柯南使用libstdc++11。。。现在天气很好。我想首先应该读一下柯南的日志:D。。。
#include <gtest/gtest.h>

int main(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}