【问题标题】:Installing gtest with conan用柯南安装 gtest
【发布时间】:2019-07-21 20:02:15
【问题描述】:

我即将改用柯南,希望这将简化我的用户安装我的包的过程。没关系,直到我开始将 gtest 添加到我的包中。

在安装过程中,我收到消息

gtest/1.8.1@bincrafters/stable: Package installed 
conanfile.txt imports(): Copied 4 '.a' files: libgmockd.a, libgtestd.a, libgmock_maind.a, libgtest_maind.a

但是,在构建过程中我收到:

/usr/bin/ld: cannot find -lgmock_maind
/usr/bin/ld: cannot find -lgmockd
/usr/bin/ld: cannot find -lgtestd

我的 CMakeLists.txt 文件包含

target_link_libraries(
    ${PROJECT_NAME}_GTEST
    Modules
    ${CONAN_LIBS}
)

缺少什么?我可以提供一些吗

link_directories(?)

争论?

(与此同时,经过一些尝试,我成功了:不仅

 link_directories(${CONAN_LIB_DIRS_GTEST})

是必须的,但柯南的.data也必须清除。)

【问题讨论】:

  • 你能把整个 conanfile.txt 和 CMakeLists.txt 贴出来吗?我对 imgui-sfml 有类似的问题

标签: googletest gmock conan


【解决方案1】:

你用的是什么生成器?

我的 conanfile.txt 要求部分中有这个

gtest/[~=1.8]@bincrafters/stable

这就是我在该部分中为生成器提供的内容

cmake_find_package
cmake_paths

在 CMakeLists.txt 中

include(${CMAKE_BINARY_DIR}/conan_paths.cmake)
find_package(gtest REQUIRED)
add_dependencies(something gtest::gtest)
target_link_libraries(something gtest::gtest)

注意FindGTest是一个内置模块,而Findgtest.cmake是conan在build目录下生成的文件。

【讨论】:

  • 我确实使用过 cCMake
【解决方案2】:

gtest 的 Bincrafters 包被标记为已过时,您应该使用柯南中心的那个。
为此,只需将柯南食谱添加到conanfile.txt/py
假设您使用普通的conanfile.txt

# conanfile.txt
[requires]
gtest/1.10.0
    
[generators]
cmake

然后你可以运行conan install

然后将柯南指令添加到你项目的CMakeLists.txt

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

您可以打印一条消息以查看包含的库:
message("-- Conan libs: ${CONAN_LIBS}").
这应该包括gtestgmock

最后,只需包含标头,并使用框架:

 #include "gtest/gtest.h"
    
 TEST(TestName, Foo)
 {
     EXPECT_TRUE(true);
 }

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2023-01-15
    相关资源
    最近更新 更多