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.