【问题标题】:find_package does not find GTest which is part of CMakefind_package 没有找到属于 CMake 的 GTest
【发布时间】:2016-10-20 07:49:52
【问题描述】:

我想通过以下方式找到GTest

find_package(GTest REQUIRED)

但是没有找到:

错误:找不到 GTest(缺少:GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)

我从这个link 知道GTest 应该通过标准CMake 分发。

你能告诉我我做错了什么吗?

【问题讨论】:

标签: c++ cmake googletest


【解决方案1】:

如果您使用的是 Ubuntu,您应该阅读/usr/share/doc/libgtest-dev/README.Debian。它说:

Google C++ 测试框架对某些使用条件编译 事物。由于 C++“一个定义规则”,gtest 必须是 使用与被测 C++ 代码完全相同的标志编译。 因为这很难管理,上游不再推荐使用 预编译库

因此,您应该使用完全相同的编译器选项编译和安装您自己版本的gtest 库,并相应地设置GTEST_LIBRARYGTEST_ROOT 变量。

例如,我做了以下事情:

$ mkdir -p ExternalLibs/gTest
$ cd ExternalLibs/gTest
$ cmake /usr/src/gtest
$ make

然后我在CMakeLists.txt 中添加了以下几行:

set (GTEST_ROOT ${CMAKE_SOURCE_DIR}/ExternalLibs/gTest)
find_package(GTest REQUIRED)

【讨论】:

    【解决方案2】:

    find_package 不在 CMake 的安装目录中查找。它只评估PATHCMAKE_PREFIX_VARIABLES。只需将 CMake 的 GTest 的路径添加到后一个变量中,清除 CMake 缓存并重新运行 CMake。

    【讨论】:

    • 我发现 FindGTest.cmake 在 /Applications/Clion.app/Contents/bin/cmake/share/cmake-3.6/Modules/
    【解决方案3】:

    如果你安装了 gtest,你可以这样做:

    add_subdirectory("/usr/src/gtest" ${CMAKE_BINARY_DIR}/gtest)
    enable_testing()
    include_directories(${GTEST_INCLUDE_DIRS})
    add_executable(test test.cpp)
    target_link_libraries(test gtest gtest_main)
    add_test(AllTests test)
    

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 2022-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多