2013-07-04 19 views
8

Questo è il mio CMakeLists.txt:CMake non riesce a trovare una libreria richiesta

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) 

Quando si esegue cmake ricevo il seguente errore:

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

come risolvere questo?

risposta

11

Hai ottenuto indietro. Si suppone che la chiamata find_package trovi la posizione della libreria gtest per te. Non sarà necessario specificare manualmente i percorsi comprendono e la biblioteca più:

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

Date un'occhiata al FindGTest.cmake nella CMake Moduli directory per i dettagli.

Il problema per cui è stato visualizzato il messaggio di errore è che find_package(GTest REQUIRED) non è in grado di trovare gtest sul sistema. Con il parametro REQUIRED, hai richiesto a CMake di fallire immediatamente se non è possibile trovare la libreria (che in realtà è la cosa giusta da fare qui).

Quindi quello che devi fare è fornire FindGTest con i mezzi per localizzare la tua biblioteca. Sfortunatamente, non esiste un modo standard per farlo, poiché le informazioni necessarie per trovare una libreria variano da una libreria all'altra. Quindi dovrai controllare la fonte dello script di ricerca.

Questo vi dirà che FindGTest si basa sulla variabile di ambiente GTEST_ROOT per trovare la libreria. Imposta quella variabile di ambiente sul percorso della tua installazione gtest, riesegui CMake e dovresti stare bene.

Se il layout del installazione è diversa da quella che FindGTest aspetta, potrebbe essere necessario scrivere il proprio script di trovare invece. Gli script di ricerca forniti con CMake sono in genere abbastanza buoni, ma a volte semplicemente non funzionano su alcune piattaforme già pronte all'uso. Se riesci a trovare una patch che aggiunga supporto per la tua piattaforma, di solito non è un problema integrarla con la distribuzione ufficiale di CMake.

Si noti che se si intende creare gtest da soli (invece di utilizzare i binari forniti dal sistema operativo) utilizzando lo script di ricerca non è l'idea migliore in primo luogo. Dovresti invece usare un imported target.

+1

Ho installato intestazioni GTEST in/usr/inculde/GTEST e librerie in/usr/lib/GTEST. Allora, qual è il GTEST_ROOT? Sono ancora confuso da questo. – friko

+1

Supponendo che tu stia utilizzando [lo script di ricerca da CMake 2.8.11] (http://cmake.org/gitweb?p=cmake.git;a=blob;f=Modules/FindGTest.cmake;h=d531dd12d90fc0bdbb2fba424c448f4e9f69f4bf;hb = 0ad0c37206fce114c4e4c31f5270b53e181ab3c2), il tuo 'GTEST_ROOT' dovrebbe essere'/usr'. Quello script usa 'include' e' lib' come suffissi rispettivamente per include e lib directory, quindi dovresti stare bene. Esportazione – ComicSansMS

+0

GTEST_ROOT =/usr dopo quel comando il mio cmake fallisce ancora con la stessa ragione .. – friko

Problemi correlati