Cmake non trova Boost


89

Sto cercando 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_LIBRARYDIRe BOOST_ROOT, ma ho ancora un errore dicendo che CMake non è in grado di trovare Boost. Quale potrebbe essere la ragione di tale errore?


Alcune versioni di Boost usano la bandiera Boost_INCLUDE_DIRe altre usano la bandiera Boost_INCLUDEDIR( senza il trattino basso ). Puoi controllare quello giusto per il tuo caso leggendo il FindBoost.cmakefile, sottopath-to-cmake/Modules/FindBoost.cmake
— marcelosalloum

Cordiali saluti, se stai costruendo boost con il supporto CMake dovresti usarefind_package(Boost CONFIG)
— Dmitry Sazonov

Risposte:


106

Sei sicuro di farlo nel modo corretto? L'idea è che i set di CMake BOOST_INCLUDE_DIR, BOOST_LIBRARYDIRe BOOST_ROOTautomaticamente. Fai qualcosa di simile in CMakeLists.txt:

Se il boost non è installato in una posizione predefinita e può, quindi, non essere trovato da CMake, puoi dire a CMake dove cercare il boost in questo modo:

Naturalmente, queste due linee devono essere prima che l' FIND_PACKAGE(Boost)a CMakeLists.txt.


36
E ' ${Boost_INCLUDE_DIR}non è ${BOOST_INCLUDE_DIR}, caso conta.
— Ihor Kaharlichenko

3
Forse questo è cambiato nelle versioni più recenti di cmake, ma ecco i documenti di riferimento: cmake.org/cmake/help/v3.0/module/FindBoost.html
— Nick Desaulniers

2
non funziona per me ... Trova la libreria boost, ma genera tonnellate di errori al momento della compilazione

1
Non dovrebbe essere ' BOOST_INCLUDEDIR'?
— dmedine

2
@IhorKaharlichenko, ma BOOST_ROOT dovrebbe essere BOOST_ROOT. meraviglioso! Fammi provare con tutte le custodie, cammello, tutte maiuscole, con trattini bassi, senza trattini bassi ... <face-palm>
— Duck Dodgers

54

È disponibile ulteriore aiuto leggendo il FindBoost.cmakefile stesso. Si trova nella directory "Moduli".

Un buon inizio è set(Boost_DEBUG 1): questo sputerà una buona quantità di informazioni su dove sta cercando il boost, cosa sta cercando e può aiutare a spiegare perché non riesce a trovarlo.

Può anche aiutarti a capire se sta raccogliendo BOOST_ROOTcorrettamente.

FindBoost.cmakea volte ha anche problemi se la versione esatta di boost non è elencata nelle variabili Versioni disponibili. Puoi trovare di più su questo leggendo FindBoost.cmake.

Infine, FindBoost.cmakeha avuto alcuni bug in passato. Una cosa che potresti provare è prendere una versione più recente FindBoost.cmakedall'ultima versione di CMake e incollarla nella cartella del tuo progetto a fianco CMakeLists.txt- quindi anche se hai una vecchia versione di boost, utilizzerà la nuova versione di FindBoost.cmakequella è in la cartella del tuo progetto.

In bocca al lupo.


10

Ho lottato con questo problema per un po 'da solo. Si è scoperto che cmakestava 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 crearla. Le nostre librerie Boost sono state costruite utilizzando GCC 4.9.1, e quella versione del compilatore era infatti presente sul nostro sistema; tuttavia, GCC 4.4.7è stato installato anche. In effetti, lo FindBoost.cmakescript di cmake stava rilevando automaticamente l' GCC 4.4.7installazione invece di GCC 4.9.1quella, e quindi cercava i file della libreria Boost con " gcc44" nei nomi dei file, invece di " gcc49".

La soluzione semplice era costringere cmake a presumere che GCC 4.9 fosse presente, impostando Boost_COMPILER" -gcc49" in CMakeLists.txt. Con questa modifica FindBoost.cmake, ho cercato e trovato i miei file di libreria Boost.


7

Puoi anche specificare la versione di Boost che desideri venga utilizzata da CMake passando -DBOOST_INCLUDEDIRo -DBOOST_ROOTindicando la posizione delle intestazioni di boost della versione corrette

Esempio:

cmake -DBOOST_ROOT=/opt/latestboost

Ciò sarà utile anche quando più versioni boost sono sullo stesso sistema.


Grazie, per me ha funzionato con Avro build per Windows.
— ggurov

Ha funzionato per me, impostandolo nello strumento GUI CMake come ambiente ... Quindi Aggiungi voce, quindi BOOST_ROOT, valore C: \ Programmi \ PCL 1.11.1 \ 3rdParty \ Boost (Ho PCL installato)
— Richard Keene

5

Ho anche avuto un problema simile e ho scoperto che le variabili env BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR e BOOST_ROOT devono contenere percorsi assoluti . HTH!


Sì. Ha avuto lo stesso problema a causa del percorso relativo nell'ambiente BOOST_ROOT. Molte grazie a te!
— korst1k

2

Ho avuto lo stesso problema durante il tentativo di eseguire makeun progetto dopo aver installato la versione Boost 1.66.0 su Ubuntu Trusty64. Il messaggio di errore era simile a (non esattamente come) questo:

Boost è stato sicuramente installato, ma CMake non è riuscito a rilevarlo. Dopo aver passato molto tempo ad armeggiare con percorsi e variabili ambientali, alla fine ho finito per controllare cmakese stesso per le opzioni e ho trovato quanto segue:

Quindi ho eseguito quanto segue nella directory in questione:

sudo cmake --check-system-vars

che ha restituito:

e ha risolto il problema.


2

Per la versione di cmake 3.1.0-rc2da prelevare, boost 1.57specificare-D_boost_TEST_VERSIONS=1.57

cmake version 3.1.0-rc2il valore predefinito boost<=1.56.0è come si vede usando-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++


2

Se stai costruendo il tuo boost, non dimenticare di usare --layout=versionedaltrimenti la ricerca di una particolare versione della libreria fallirà


1

Un altro consiglio per chiunque cerchi di costruire CGAL in particolare, con Boost collegato staticamente. Non è sufficiente definire Boost_USE_STATIC_LIBS; viene sovrascritto dal tempo che Boost_DEBUGrestituisce il suo valore. La cosa da fare qui è selezionare la casella di controllo "Avanzate" e abilitare CGAL_Boost_USE_STATIC_LIBS.


1

Per me questo errore era semplicemente perché Boost non era installato così su Ubuntu:

sudo apt install build-essential libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev


0

Ho avuto lo stesso problema e nessuna delle soluzioni di cui sopra ha funzionato. In realtà, il file include/boost/version.hppnon può essere letto (dallo script cmake lanciato da jenkins).

Ho dovuto modificare manualmente il permesso della libreria (boost) (anche se jenkins appartiene al gruppo, ma questo è un altro problema legato a jenkins che non sono riuscito a capire):


0

Questo può accadere anche se CMAKE_FIND_ROOT_PATHè impostato come diverso da BOOST_ROOT. Ho affrontato lo stesso problema che nonostante l'impostazione BOOST_ROOT, stavo ottenendo l'errore. Ma per la compilazione incrociata per ARM stavo usando Toolchain-android.cmake in cui avevo (per qualche motivo):

CMAKE_FIND_ROOT_PATHsembra sovrascrivere la BOOST_ROOTcausa del problema.


-1

Può essere

ti aiuterò.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.