2013-07-04 3 views
8

Это мой CMakeLists.txt:CMake не может найти требуемую библиотеку

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 я получаю следующее сообщение об ошибке:

[email protected]:~/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) 

Как решить это?

ответ

11

Вы получили это назад. Предполагается, что вызов 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.cmake в вашем CMake модули каталога для деталей.

Проблема, по которой вы получили сообщение об ошибке, заключается в том, что find_package(GTest REQUIRED) не может найти gtest в вашей системе. С параметром REQUIRED вы запросили CMake немедленно выполнить сбой, если библиотека не может быть найдена (что на самом деле является правильным решением здесь).

Так что вам нужно предоставить FindGTest, чтобы найти вашу библиотеку. К сожалению, нет стандартного способа сделать это, так как информация, необходимая для поиска библиотеки, варьируется от библиотеки к библиотеке. Поэтому вам придется проверить источник скрипта find.

Это скажет вам, что FindGTest полагается на переменную окружения GTEST_ROOT, чтобы найти ее. Установите эту переменную среды на путь вашей установки gtest, повторно запустите CMake, и все будет в порядке.

Если макет вашей установки отличается от того, который FindGTest ожидает, возможно, вам придется написать собственный скрипт поиска. Скрипты поиска, которые поставляются с CMake, обычно неплохие, но иногда они просто не работают на определенных платформах из коробки. Если вы можете придумать патч, который добавит поддержку вашей платформы, обычно нет проблем, чтобы интегрировать его с официальным дистрибутивом CMake.

Обратите внимание, что если вы намереваетесь создавать gtest самостоятельно (вместо использования двоичных файлов, предоставляемых вашей операционной системой), используя сценарий поиска, это не лучшая идея в первую очередь. Вместо этого вы должны использовать imported target.

+1

Я установил GTEST заголовки в/USR/выслать ему/GTEST и библиотеки в/USR/Lib/GTEST. Так что же такое GTEST_ROOT? Я все еще смущен этим. – friko

+1

Предполагая, что вы используете [сценарий поиска от CMake 2.8.11] (http://cmake.org/gitweb?p=cmake.git;a=blob;f=Modules/FindGTest.cmake;h=d531dd12d90fc0bdbb2fba424c448f4e9f69f4bf;hb = 0ad0c37206fce114c4e4c31f5270b53e181ab3c2), ваш 'GTEST_ROOT' должен быть'/usr'. Этот скрипт использует 'include' и' lib' в качестве суффиксов для include и lib, соответственно, поэтому вы должны быть в порядке. – ComicSansMS

+0

export GTEST_ROOT =/usr после этой команды мой cmake по-прежнему терпит неудачу по той же причине .. – friko

Смежные вопросы