web-dev-qa-db-fra.com

CMake trouve Boost mais les cibles importées ne sont pas disponibles pour la version Boost

J'utilise CMake pour trouver Boost. Boost est trouvé, mais CMake erreurs avec

Cibles importées non disponibles pour la version Boost

Voir l'erreur complète (de macOS) ci-dessous. Qu'est-ce que je fais mal?

CMake Warning at /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:743 (message):
  Imported targets not available for Boost version 106300
Call Stack (most recent call first):
  /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:842 (_Boost_COMPONENT_DEPENDENCIES)
/Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:1395 (_Boost_MISSING_DEPENDENCIES)
CMakeLists.txt:6 (find_package)

Boost version: 1.63.0
Found the following Boost libraries:
  thread
CMake Warning at /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:743 (message):
  Imported targets not available for Boost version 106300
Call Stack (most recent call first):
  /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:842 (_Boost_COMPONENT_DEPENDENCIES)
  /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:1395 (_Boost_MISSING_DEPENDENCIES)
  CMakeLists.txt:7 (find_package)
51
Sounak

Votre version de CMake est trop ancienne. Mettez à jour CMake et cela fonctionnera.

CMake ne peut pas détecter les dépendances entre les différentes bibliothèques Boost. Ils ont explicitement implémenté dans FindBoost.
Pour chaque version de Boost, ces informations sont ajoutées par les responsables de CMake et sont incluses dans la prochaine version de CMake. Vous devez donc vous assurer que votre version de CMake a été publiée après la version de Boost que vous essayez de trouver.

Boost 1.63 nécessite CMake 3.7 ou une version plus récente.
Boost 1.64 nécessite CMake 3.8 ou une version plus récente.
Les Boost 1.65 et 1.65.1 nécessitent CMake 3.9.3 ou une version plus récente.
Boost 1.66 nécessite CMake 3.11 ou une version plus récente.
Boost 1.67 nécessite CMake 3.12 ou une version plus récente.
Boost 1.68, 1.69 nécessitent CMake 3.13 ou une version plus récente.
Boost 1.70 nécessite CMake 3.14 ou une version plus récente.

Sans FindBoost

À partir de la version 1.70, Boost fournit un BoostConfig.cmake qui rend obsolète FindBoost et les modifications requises. En utilisant

find_package(Boost CONFIG)

exclut le fichier FindBoost et recherche uniquement le fichier de configuration. Il y a des idées pour supprimer FindBoost de CMake , mais comme cela romprait le support des versions antérieures à 1.70, CMake attend cette étape. Néanmoins, c’est le moyen de se débarrasser de ce gâchis dans les futures versions de CMake.

99
usr1234567

Je voulais simplement publier le travail suivant, car il est beaucoup plus facile que de mettre à jour CMake sur les systèmes sur lesquels je travaille et sur lesquels je n’ai pas l’accès root/Sudo. Ensemble BOOST_INCLUDEDIR et BOOST_LIBRARYDIR directement lors de l'appel de CMake.

cmake  -DBOOST_INCLUDEDIR=... -DBOOST_LIBRARYDIR=... ...

Cela peut ne pas fonctionner si Boost a changé les dépendances entre la liste codée en dur dans le module livré avec CMake et la version boost que vous utilisez. Il vous faudra 30 secondes pour essayer contre 30 minutes l’installation de cmake à partir de la source.

1
user2267882