首页 > 解决方案 > 无法将 gtest_main 作为外部静态库与 cmake 和 Cygwin 链接。i686-pc-cygwin/bin/ld: 找不到 -lgtest_main

问题描述

我正在寻找一种将谷歌测试编译为静态库并将该库链接到我的项目的方法。我需要这个来加速单元测试。并且需要避免使用“FetchContent_”下载我正在使用 Cygwin 处理 Windows。将谷歌测试编译为外部静态库是否正确?

但是我在将谷歌测试作为静态库链接到我的单元测试时遇到了问题。

有我的 CMake 脚本:

find_package(Threads REQUIRED)
set(LIBPREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}")
set(LIBSUFFIX "${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(GTEST_LOCATION "${CMAKE_SOURCE_DIR}/../../../../testSuite/googletest/build/lib")
set(GTEST_INCLUDES "${CMAKE_SOURCE_DIR}/../../../../testSuite/googletest/include")
set(GTEST_LIBRARY  "${GTEST_LOCATION}/${LIBPREFIX}gtest${LIBSUFFIX}")
set(GTEST_MAINLIB  "${GTEST_LOCATION}/${LIBPREFIX}gtest_main${LIBSUFFIX}")

add_library(GTest IMPORTED STATIC GLOBAL)
set_target_properties(GTest PROPERTIES
    IMPORTED_LOCATION                 "${GTEST_LIBRARY}"
    INTERFACE_INCLUDE_DIRECTORIES     "${GTEST_INCLUDES}"
    IMPORTED_LINK_INTERFACE_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}")

add_library(GTestMain IMPORTED STATIC GLOBAL)
set_target_properties(GTestMain PROPERTIES
    IMPORTED_LOCATION "${GTEST_MAINLIB}"
    IMPORTED_LINK_INTERFACE_LIBRARIES
        "${GTEST_LIBRARY};${CMAKE_THREAD_LIBS_INIT}")
        
        
...

target_link_libraries(test_${ModuleName} PRIVATE ${ModuleName}_lib GTest GTestMain fff_if)
...

我不断收到错误:

/usr/lib/gcc/i686-pc-cygwin/9.3.0/../../../../i686-pc-cygwin/bin/ld:找不到-lgtest_main

您能否建议使用 Cmake 将谷歌测试链接为静态并使用预先存在的谷歌测试静态库的最佳方法!

谢谢你的帮助。

更新: 需要的库在这里:${CMAKE_SOURCE_DIR}/../../../../testSuite/googletest/build/lib/

我也可以通过使用 find_library() 来解决这个问题:

find_library(
    LIBGTESTMAIN_LIBRARY
    NAMES gtest_main
    HINTS ${CMAKE_SOURCE_DIR}/../../../../testSuite/googletest/build/lib/)
find_library(
    LIBGTEST_LIBRARY
    NAMES gtest
    HINTS ${CMAKE_SOURCE_DIR}/../../../../testSuite/googletest/build/lib/)

message(STATUS "LIBGTESTMAIN_LIBRARY=${LIBGTESTMAIN_LIBRARY}")
message(STATUS "LIBGTEST_LIBRARY=${LIBGTEST_LIBRARY}")

...
target_link_libraries(test_${ModuleName} PRIVATE ${ModuleName}_lib  timer_lib ${LIBGTEST_LIBRARY} ${LIBGTESTMAIN_LIBRARY} fff_if)
...

标签: cmakestaticcygwingoogleteststatic-linking

解决方案


推荐阅读