Sto tentando di configurare un progetto utilizzando CMake, ma non riesce a trovare le librerie Boost anche se si trovano nella cartella specificata. Ho specificato Boost_INCLUDE_DIR, Boost_LIBRARYDIR e BOOST_ROOT, ma ricevo comunque un errore che dice che CMake non è in grado di trovare Boost. Quale potrebbe essere la ragione di tale errore?Cmake non trova Boost
risposta
Sei sicuro di farlo nel modo corretto? L'idea è che CMake imposta automaticamente BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR e BOOST_ROOT. Fare qualcosa di simile in CMakeLists.txt:
FIND_PACKAGE(Boost)
IF (Boost_FOUND)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
ADD_DEFINITIONS("-DHAS_BOOST")
ENDIF()
se spinta non è installato in una posizione predefinita e non può quindi essere trovato da CMake, si può dire CMake dove cercare spinta in questo modo:
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib")
ovviamente quelle due linee devono essere prima il FIND_PACKAGE (Boost) in CMakeLists.txt
Non v'è più aiuto disponibile leggendo il file FindBoost.cmake stesso. Si trova nella directory 'Modules'.
Un buon inizio è impostare (Boost_DEBUG 1) - questo sputerà una buona quantità di informazioni su dove sta cercando l'amplificazione, cosa sta cercando e potrebbe aiutare a spiegare perché non riesce a trovarlo.
Può anche aiutarti a capire se sta riprendendo correttamente il tuo BOOST_ROOT.
FindBoost.cmake a volte ha anche problemi se la versione esatta di boost non è elencata nelle variabili Versioni disponibili. Puoi trovare maggiori informazioni leggendo FindBoost.cmake
Infine, FindBoost.cmake ha avuto alcuni bug in passato. Una cosa che potresti provare è di prendere una versione più recente di FindBoost.cmake dall'ultima versione di cmake, e inserirla nella cartella del tuo progetto insieme a CMakeLists.txt - quindi, anche se hai una vecchia versione di boost, userà il nuova versione di FindBoost.cmake che si trova nella cartella del progetto.
Buona fortuna.
Un altro piccolo consiglio per chiunque stia cercando di costruire CGAL in particolare, con Boost collegato staticamente. Non è sufficiente definire Boost_USE_STATIC_LIBS
; viene sovrascritto dal momento in cui Boost_DEBUG
emette il suo valore. La cosa da fare qui è controllare la casella di controllo "Avanzate" e abilitare CGAL_Boost_USE_STATIC_LIBS
.
Se state costruendo la propria spinta non dimenticare di usare il --layout = versioned altrimenti la ricerca di una particolare versione di libreria fallirà
Ho anche avuto un problema simile e ha scoperto che il BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR e le variabili env BOOST_ROOT devono contenere i percorsi assoluti. HTH!
Per la versione 3.1.0 cmake-RC2 per raccogliere spinta 1,57 specificare -D_boost_TEST_VERSIONS = 1.57
versione cmake default 3.1.0-RC2 per aumentare < = 1.56.0 come si vede utilizzando -DBoost_DEBUG = ON
cmake -D_boost_TEST_VERSIONS = 1.57 -DBoost_DEBUG = ON -DCMAKE_BUILD_TYPE = Debug -DCMAKE_C_COMPILER = clang -DCMAKE_CXX_COMPILER = clang ++
Ho sofferto per un po 'di tempo con questo problema. Si è scoperto che cmake
stava cercando i file della libreria Boost utilizzando la convenzione di denominazione di Boost, in cui il nome della libreria è una funzione della versione del compilatore utilizzata per crearlo. Le nostre librerie Boost sono state costruite usando GCC 4.9.1
e quella versione del compilatore era presente sul nostro sistema; tuttavia, è stato installato anche GCC 4.4.7
. Come accade, lo script FindBoost.cmake
di cmake stava rilevando automaticamente l'installazione GCC 4.4.7
anziché quella GCC 4.9.1
, quindi cercava i file di libreria Boost con "gcc44
" nei nomi file, anziché "gcc49
".
La semplice correzione era di forzare cmake ad assumere che GCC 4.9 fosse presente, impostando Boost_COMPILER
su "-gcc49
" in CMakeLists.txt
. Con questa modifica, FindBoost.cmake
ha cercato e trovato i file della mia libreria Boost.
È inoltre possibile specificare la versione del Boost che si desidera CMake da usare passando -DBOOST_INCLUDEDIR o -DBOOST_ROOT che punta alla posizione di corretta versione intestazioni spinta
Esempio:
cmake -DBOOST_ROOT=/opt/latestboost
Ciò sarà utile anche quando più versioni di boost si trovano sullo stesso sistema.
Ho avuto lo stesso problema durante il tentativo di eseguire make
per un progetto dopo aver installato la versione di potenziamento 1.66.0 su Ubuntu Trusty64. Il messaggio di errore è stato simile a (non esattamente) questo:
CMake Error at
/usr/local/Cellar/cmake/3.3.2/share/cmake/Modules/FindBoost.cmake:1245 (message):
Unable to find the requested Boost libraries.
Boost version: 0.0.0
Boost include path: /usr/include
Detected version of Boost is too old. Requested version was 1.36 (or newer).
Call Stack (most recent call first):
CMakeLists.txt:10 (FIND_PACKAGE)
Boost è stato definitivamente installato, ma CMake non poteva rilevarla. Dopo aver trascorso un sacco di tempo ad armeggiare con i percorsi e le variabili ambientali, alla fine ho finito per il controllo cmake
sé per le opzioni e trovato il seguente:
--check-system-vars = Find problems with variable usage in system files
così mi sono imbattuto il seguente nella directory in questione:
sudo cmake --check-system-vars
che ha restituito:
Also check system files when warning about unused and uninitialized variables.
-- Boost version: 1.66.0
-- Found the following Boost libraries:
-- system
-- filesystem
-- thread
-- date_time
-- chrono
-- regex
-- serialization
-- program_options
-- Found Git: /usr/bin/git
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/myproject
e ha risolto il problema.
- 1. Cmake non trova le librerie Boost
- 2. cmake non trova librerie di boost
- 3. cmake non trova Qt4
- 4. CMake non trova le maledizioni
- 5. CMake and Boost
- 6. cmake trova libbie python errate
- 7. Boost log, GCC 4.4 e CMake
- 8. CMake non trova FFMPEG nel percorso di installazione personalizzato
- 9. CMake non trova i thread con la toolchain Linaro
- 10. CMake + trova pacchetto o controlla e installa
- 11. cmake non collega ncurses
- 12. Trova il tipo di oggetto boost python
- 13. packaging C++ programma usando librerie boost con cmake/cpack
- 14. Ricerca di Boost compilato con CLang con CMake
- 15. Impostare la versione minima di boost in cmake
- 16. Collegamento boost alla libreria condivisa con CMake su Linux
- 17. Collega le versioni statiche delle librerie Boost usando CMake
- 18. cmake - find_library - posizione libreria personalizzata
- 19. CMake ... ccmake o cmake?
- 20. Come rendere le DLL Boost accessibili a un eseguibile creato con CMake?
- 21. CMake può generare script di compilazione che * non * usano cmake?
- 22. CMake FIND_PACKAGE riesce ma restituisce strada sbagliata
- 23. Boost Intersezione non funzionante
- 24. CMake add_custom_command non viene eseguito
- 25. cmake non riconosce l'impostazione CMAKE_ECLIPSE_VERSION
- 26. Cmake non funziona con openMP su Maverick
- 27. boost :: enable_if_c non sembra funzionare
- 28. rilevamento della piattaforma in cmake
- 29. Perché non è incluso questo file di intestazione di boost
- 30. Come compilare CMake per ARM con CMake
È '$ {Boost_INCLUDE_DIR}' non '$ {BOOST_INCLUDE_DIR}', il caso è importante. –
Forse questo è cambiato nelle versioni più recenti di cmake, ma ecco i documenti di riferimento: http://www.cmake.org/cmake/help/v3.0/module/FindBoost.html –
non funziona per me ... trova la libreria boost, ma genera tonnellate di errori al momento della compilazione –