2013-07-04 13 views
8

To mój CMakeLists.txt:CUpewnij nie może znaleźć wymaganą bibliotekę

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) 

Podczas uruchamiania cmake pojawia się następujący błąd:

[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) 

Jak rozwiązać ten problem?

Odpowiedz

11

Masz go od tyłu. Wywołanie find_package powinno znaleźć dla ciebie lokalizację biblioteki gtest. Nie trzeba będzie ręcznie określić ścieżki include i bibliotek już:

# 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) 

Spójrz na FindGTest.cmake w swojej CMake moduły katalogu o szczegóły.

Problem z tym, dlaczego komunikat o błędzie jest następujący: find_package(GTest REQUIRED) nie może znaleźć gtest w systemie. Za pomocą parametru REQUIRED zażądałeś, aby program CMake natychmiast poniósł niepowodzenie, jeśli nie można znaleźć biblioteki (co właściwie jest właściwym rozwiązaniem).

Musisz więc podać FindGTest za pomocą środków do zlokalizowania biblioteki. Niestety, nie ma standardowego sposobu, aby to zrobić, ponieważ informacje potrzebne do znalezienia biblioteki różnią się w zależności od biblioteki. Musisz więc sprawdzić źródło skryptu wyszukiwania.

To powie Ci, że FindGTest polega na zmiennej środowiskowej GTEST_ROOT, aby znaleźć bibliotekę. Ustaw tę zmienną środowiskową na ścieżkę do instalacji gtest, ponownie uruchom CMake i powinno być dobrze.

Jeśli układ Twojej instalacji różni się od tego, którego oczekuje FindGTest, być może będziesz musiał zamiast tego napisać własny skrypt znajdowania. Skrypty do znalezienia dostarczane z CMake są zazwyczaj całkiem dobre, ale czasami po prostu nie działają na niektórych platformach po wyjęciu z pudełka. Jeśli możesz wymyślić poprawkę, która dodaje obsługę twojej platformy, zwykle nie ma problemu z integracją jej z oficjalną dystrybucją CMake.

Należy pamiętać, że jeśli zamierzasz sam zbudować gt (zamiast używać plików binarnych dostarczonych przez system operacyjny), użycie skryptu wyszukiwania nie jest najlepszym pomysłem. Zamiast tego należy użyć wartości imported target.

+1

Mam zainstalowany numeru GTEST nagłówków do/usr/inculde/numeru GTEST i biblioteki do/usr/lib/numeru GTEST. Czym jest GTEST_ROOT? Nadal jestem z tym zdezorientowany. – friko

+1

Zakładając, że używasz [skryptu znajdowania z CMake 2.8.11] (http://cmake.org/gitweb?p=cmake.git;a=blob;f=Modules/FindGTest.cmake;h=d531dd12d90fc0bdbb2fba424c448f4e9f69f4bf;hb = 0ad0c37206fce114c4e4c31f5270b53e181ab3c2), twój 'GTEST_ROOT' musiałby być'/usr'. Ten skrypt używa "include" i "lib" jako sufiksów odpowiednio dla katalogu include i lib, więc powinieneś być w porządku. – ComicSansMS

+0

export GTEST_ROOT =/usr po tym poleceniu mój cmake nadal kończy się niepowodzeniem z tego samego powodu .. – friko

Powiązane problemy