CMake encuentra Boost pero los objetivos importados no están disponibles para la versión Boost

Resuelto Sounak asked hace 7 años • 2 respuestas

Utilizo CMake para encontrar Boost. Se encuentra Boost, pero se eliminan los errores de CMake

Objetivos importados no disponibles para la versión Boost

Vea el error completo (de macOS) a continuación. ¿Qué estoy haciendo 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)
Sounak avatar Feb 09 '17 04:02 Sounak
Aceptado

Tu versión de CMake es demasiado antigua. Actualice CMake y funcionará.

CMake no puede detectar las dependencias entre las diferentes bibliotecas de Boost. Se han implementado explícitamente en FindBoost.
Para cada versión de Boost, los mantenedores de CMake agregan esta información y forma parte de la próxima versión de CMake. Por lo tanto, debe asegurarse de que su versión de CMake se haya lanzado después de la versión de Boost que intenta encontrar.

Boost 1.63 requiere CMake 3.7 o posterior.
Boost 1.64 requiere CMake 3.8 o posterior.
Boost 1.65 y 1.65.1 requieren CMake 3.9.3 o posterior.
Boost 1.66 requiere CMake 3.11 o posterior.
Boost 1.67 requiere CMake 3.12 o posterior.
Boost 1.68, 1.69 requiere CMake 3.13 o posterior.
Boost 1.70 requiere CMake 3.14 o posterior.
Boost 1.71 requiere CMake 3.15.3 o posterior.
Boost 1.72 requiere CMake 3.16.2 o posterior.
Boost 1.73 requiere CMake 3.17.2 o posterior.
Boost 1.74 requiere CMake 3.19 o posterior.
Boost 1.75 requiere CMake 3.19.5 o posterior.
Boost 1.76 requiere CMake 3.20.3 o posterior.
Boost 1.77 requiere CMake 3.21.3 o posterior.
Boost 1.78 requiere CMake 3.22.2 o posterior.
Boost 1.79 requiere CMake 3.23.2 o posterior.
Boost 1.80 requiere CMake 3.24.2 o posterior.
Boost 1.81 requiere CMake 3.25.2 o posterior.
Boost 1.82 requiere CMake 3.27.0 o posterior.
Boost 1.83 requiere CMake 3.27.4 o posterior.
Boost 1.84 requiere CMake 3.28.2 o posterior.

Sin encontrarBoost

A partir de la versión 1.77, Boost proporciona una BoostConfig.cmakeversión obsoleta de FindBoost y los cambios necesarios. Usando

find_package(Boost CONFIG)

excluye el archivo FindBoost y busca solo el archivo de configuración.
Por compatibilidad, CMake seguirá proporcionando FindBoost.

usr1234567 avatar Feb 08 '2017 22:02 usr1234567

Solo quería publicar la siguiente solución, ya que es mucho más fácil que actualizar CMake en los sistemas en los que estoy trabajando y donde no tengo acceso root/sudo. Establecer BOOST_INCLUDEDIRy BOOST_LIBRARYDIRdirectamente al invocar CMake.

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

Es posible que esto no funcione si Boost cambió las dependencias entre la lista codificada en el módulo que se envía con CMake y la versión de Boost que está utilizando. Le llevará 30 segundos intentarlo frente a 30 minutos instalar cmake desde la fuente.

user2267882 avatar Oct 17 '2017 19:10 user2267882