CMake无法找到所需的库

fri*_*iko 10 cmake

这是我的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)
Run Code Online (Sandbox Code Playgroud)

运行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)
Run Code Online (Sandbox Code Playgroud)

怎么解决这个?

Com*_*sMS 14

你倒退了.该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)
Run Code Online (Sandbox Code Playgroud)

看看的FindGTest.cmake详细细节您的CMake modules目录.

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

所以你需要做的是提供FindGTest找到你的图书馆的方法.遗憾的是,没有标准的方法可以做到这一点,因为查找库所需的信息因库而异.因此,您必须查看查找脚本的来源.

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

如果您的安装布局与FindGTest预期的布局不同,则可能必须编写自己的查找脚本.与CMake一起提供的查找脚本通常非常好,但有时它们只是不能在开箱即用的某些平台上运行.如果您可以提供一个补丁来增加对您的平台的支持,那么将它与官方CMake发行版集成通常没有问题.

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