【问题标题】:CMake cannot find a required libraryCMake 找不到所需的库
【发布时间】:2013-07-04 12:04:36
【问题描述】:

这是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 2.6)

# Locate GTest
find_package(GTest REQUIRED)
include_directories(/usr/include/gtest)

# Link runTests with what we want to test and the GTest and pthread library
add_executable(runTests gtest.cpp)
target_link_libraries(runTests /usr/lib/gtest pthread)

运行 cmake 时出现以下错误:

michael@michaelFriko:~/workspace/gtest/src$ cmake CMakeLists.txt
CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (message):
  Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)
Call Stack (most recent call first):
  /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:291 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-2.8/Modules/FindGTest.cmake:150 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:8 (find_package)

如何解决?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    你把它弄反了。 find_package 调用应该为您找到 gtest 库的位置。您不再需要手动指定包含和库路径:

    # Locate GTest
    find_package(GTest REQUIRED)
    include_directories(${GTEST_INCLUDE_DIRS})
    
    # Link runTests with what we want to test and the GTest and pthread library
    add_executable(runTests my_test.cpp)
    target_link_libraries(runTests ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread)
    

    查看 CMake 模块目录中的 FindGTest.cmake 了解详细信息。

    您收到错误消息的问题是find_package(GTest REQUIRED) 无法在您的系统上找到 gtest。使用 REQUIRED 参数,如果找不到库,您请求 CMake 立即失败(这实际上是正确的做法)。

    所以您需要做的是向FindGTest 提供定位您的图书馆的方法。不幸的是,没有标准的方法可以做到这一点,因为查找图书馆所需的信息因图书馆而异。所以你必须检查查找脚本的来源。

    这将告诉您FindGTest 依赖于环境变量GTEST_ROOT 来查找库。将该环境变量设置为您的 gtest 安装路径,重新运行 CMake,您应该没问题。

    如果您的安装布局与FindGTest 所期望的不同,您可能需要编写自己的查找脚本。 CMake 附带的查找脚本通常非常好,但有时它们无法在某些开箱即用的平台上运行。如果你能想出一个补丁来增加对你的平台的支持,那么将它与官方 CMake 发行版集成通常是没有问题的。

    请注意,如果您打算自己构建 gtest(而不是使用操作系统提供的二进制文件),首先使用 find 脚本并不是最好的主意。您应该改用imported target

    【讨论】:

    • 我已将 gtest 头文件安装到 /usr/inculde/gtest 并将库安装到 /usr/lib/gtest。那么 GTEST_ROOT 是什么?我仍然对此感到困惑。
    • 假设您使用的是the find script from CMake 2.8.11,您的GTEST_ROOT 必须是/usr。该脚本分别使用includelib 作为include 和lib 目录的后缀,所以你应该没问题。
    • export GTEST_ROOT=/usr 在该命令之后我的 cmake 仍然失败,原因相同..
    • 你的gtest库是否位于/usr/lib下的目录gtest中?因为那行不通。您需要直接在/usr/lib/ 中的libgtest.* 文件,而不是在子目录中。
    • 是的,这两个库 libgtest.a 和 libgtest_main.a 位于 /usr/lib/gtest/ 下。我会将它们放到 usr/lib 中,然后再试一次。
    【解决方案2】:

    您需要安装 Google 测试框架。

    在 Debian/Ubuntu 上:

    sudo aptitude install libgtest-dev
    cd /usr/src/gtest/
    sudo cmake CMakeLists.txt
    sudo make
    sudo cp *.a /usr/lib
    

    来源:https://www.eriksmistad.no/getting-started-with-google-test-on-ubuntu/

    【讨论】:

      猜你喜欢
      • 2014-08-09
      • 2018-01-10
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 2011-12-26
      • 2013-04-21
      相关资源
      最近更新 更多