12

这是我的 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)

如何解决这个问题?

4

2 回答 2

16

你把它弄反了。该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)

查看FindGTest.cmakeCMake 模块目录中的详细信息。

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

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

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

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

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

于 2013-07-04T12:22:06.250 回答
1

您需要安装 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/

于 2017-10-20T13:44:02.143 回答