CMake无法找到所需的库

时间:2013-07-04 12:04:37

标签: 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)

运行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)

如何解决这个问题?

2 个答案:

答案 0 :(得分: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)

有关详细信息,请查看CMake模块目录中的FindGTest.cmake

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

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

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

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

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

答案 1 :(得分:0)

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