98 votes

Cmake ne trouve pas Boost

J'essaie de configurer un projet à l'aide de CMake, mais il ne parvient pas à trouver les bibliothèques Boost, même si elles se trouvent dans le dossier spécifié. J'ai spécifié Boost_INCLUDE_DIR, Boost_LIBRARYDIR et BOOST_ROOT, mais j'obtiens toujours une erreur disant que CMake n'est pas en mesure de trouver Boost. Quelle pourrait être la raison d'une telle erreur?

110voto

fschmitt Points 1659

Êtes-vous sûr de le faire correctement? L'idée est que CMake configure automatiquement BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR et BOOST_ROOT. Faites quelque chose comme ceci dans CMakeLists.txt:

 FIND_PACKAGE(Boost)
IF (Boost_FOUND)
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
    ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()
 

Si boost n'est pas installé dans un emplacement par défaut et ne peut donc pas être trouvé par cmake, vous pouvez indiquer à cmake où chercher boost comme ceci:

 SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib")
 

bien entendu, ces deux lignes doivent se trouver avant FIND_PACKAGE (Boost) dans CMakeLists.txt

57voto

don bright Points 323

Il n'y a plus que l'aide offerte par la lecture de la FindBoost.cmake fichier lui-même. Il est situé dans votre 'Modules' annuaire.

Une bonne façon de commencer est de définir(Boost_DEBUG 1) - cela va cracher une bonne quantité d'informations sur l'endroit où boost est à la recherche, ce qu'il cherche, et peut aider à expliquer pourquoi il ne peut pas le trouver.

Il peut également vous aider à déterminer si c'est de ramasser sur votre BOOST_ROOT correctement.

FindBoost.cmake aussi parfois des problèmes si la version exacte de boost n'est pas répertorié dans les Versions Disponibles des variables. Vous pouvez trouver plus sur ce sujet par la lecture de FindBoost.cmake

Enfin, FindBoost.cmake a eu quelques bugs dans le passé. Une chose que vous pouvez essayer est de prendre une version plus récente de FindBoost.cmake de la dernière version de cmake, et de le coller dans votre dossier de projet aux côtés de CMakeLists.txt - alors, même si vous avez une vieille version de boost, il va utiliser la nouvelle version de FindBoost.cmake qui est dans votre dossier.

Bonne chance.

6voto

sphakka Points 48

J'ai également rencontré un problème similaire et découvert que les variables env. BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR et BOOST_ROOT doivent contenir des chemins absolus . HTH!

2voto

Gaetano Mendola Points 581

Si vous construisez votre propre boost, n'oubliez pas d'utiliser le --layout = versioned sinon la recherche d'une version particulière de la bibliothèque échouera

1voto

Philip Points 595

Encore un conseil pour ceux qui essaient de construire CGAL en particulier, avec Boost statiquement lié. Il ne suffit pas de définir Boost_USE_STATIC_LIBS ; il est remplacé par le temps Boost_DEBUG affiche sa valeur. La chose à faire ici est de cocher la case "Avancé" et d'activer CGAL_Boost_USE_STATIC_LIBS .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X