cmake - 无法将 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)
...
解决方案
推荐阅读
- clojure - 为什么 Clojure 中的 list* 仅适用于尾部位置的向量?
- javascript - 在 Ajax 中附加 DIV 之间的延迟/等待
- javascript - jquery .click() 没有完成与实际点击链接相同的过程;需要点击实际链接才能使流程工作
- asp.net-core - 使用 VSTS 的 ASP.NET Core 2.1 CI/CD 构建错误
- c++ - c++ 17 文件系统 copy_file 访问被拒绝
- java - 基于空格分割字符串
- javascript - 在 Java 脚本中给定两个字符串,查找它们是否彼此相距一个编辑
- reactjs - 提交时无法读取未定义的属性“推送”
- azure-powershell - Sync-AzureAnalysisServicesInstance 导致同步横向扩展 Azure 分析服务实例时出现问题
- python - Pygame(对象连续运动)