web-dev-qa-db-fra.com

cmake 3.0.2 ne trouve pas de boost sur 14.04

J'ai la dernière version de cmake 3.0.2 compilée à partir de sources, également installées avec libboost-all-dev. Et find_package (Boost) ne le trouve pas. Voici la sortie de cmake:

Unable to find the requested Boost libraries.

Unable to find the Boost header files. Please set BOOST_ROOT to the root 
directory containing Boost of BOOST_INCLUDEDIR to the directory containing
Boost's headers.

Dois-je définir manuellement des variables après l'installation de Boost pour les rendre visibles pour cmake?

Merci.

6
GLaz

Quelle version de libboost-all-dev utilisez-vous? Je suppose que vous utilisez la version 1.53.0.

Essayez d'installer libboost1.54-all-dev à la place.

4
Rohith Madhavan

Merci, Rohith.

Comme solution alternative, j'ai téléchargé et construit la dernière version de boost et ajouté la variable BOOST_ROOT dans ~/.profile comme ceci:

export BOOST_ROOT=$HOME/work/boost_1_57_0

Notez que ce boost doit être construit si vous utilisez ses bibliothèques non-header.

2
GLaz

Dans 14.04 (et probablement plus tôt) à 16.04, je pourrais utiliser ces:

find_package( Boost COMPONENTS filesystem system REQUIRED )

include_directories(
    ${BOOST_INCLUDE_DIRS}
)

target_link_libraries(${PROJECT_NAME}
    ${Boost_FILESYSTEM_LIBRARY}
    ${Boost_SYSTEM_LIBRARY}
}

Si vous n'avez besoin que des en-têtes, vous n'avez pas besoin de spécifier de composant ni de target_link_libraries():

find_package( Boost REQUIRED )

include_directories(
    ${BOOST_INCLUDE_DIRS}
)

Avec 16.10, je devais m'assurer d'installer libboost-all-dev pour que mon code continue à être compilé sur Ubuntu.

Sudo apt-get install libboost-all-dev

Les versions précédentes fonctionnaient avec seulement libboost-dev, en quelque sorte. Bien que vous ayez déjà compris cette partie, je voulais simplement m'assurer qu'il était clairement indiqué qu'il y avait eu un changement récent à cet égard.

1
Alexis Wilke

Je rencontre aussi une telle situation délicate à Ubuntu ...

Ma solution consiste simplement à ne pas utiliser find_package mais à ajouter les bibliothèques dans le processus de lien.

target_link_libraries( your_program boost_system boost_filesystem ... )

Le problème, c’est que cmake ne peut pas examiner l’existence de la bibliothèque boost. Cependant, cela fonctionne simplement.

J'espère que quelqu'un pourra trouver une meilleure solution.

1
bin