
Tengo el último cmake 3.0.2 compilado a partir de fuentes, también instalado libboost-all-dev. Y find_package(Boost) no puede encontrarlo. Aquí está el resultado 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.
¿Necesito configurar manualmente alguna variable después de instalar Boost para que sea visible para cmake?
Gracias.
Respuesta1
¿Qué versión libboost-all-dev
estás usando? Supongo que estás usando la versión 1.53.0.
Intente instalar libboost1.54-all-dev
en su lugar.
Respuesta2
Del 14.04 (y probablemente antes) al 16.04, podría usar estos:
find_package( Boost COMPONENTS filesystem system REQUIRED )
include_directories(
${BOOST_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME}
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
}
Si solo necesita los encabezados, no necesita especificar ningún componente y no target_link_libraries()
:
find_package( Boost REQUIRED )
include_directories(
${BOOST_INCLUDE_DIRS}
)
Con 16.10, tenía que asegurarme de instalarlo libboost-all-dev
para que mi código continuara compilándose en Ubuntu.
sudo apt-get install libboost-all-dev
Las versiones anteriores funcionaban solo con libboost-dev
, de alguna manera. Aunque parece que ya entendiste esa parte, solo quería asegurarme de que se mencionara claramente que hubo un cambio reciente en ese sentido.
Respuesta3
Gracias, Rohith.
Como solución alternativa, descargué y construí la última versión de boost y agregué la variable BOOST_ROOT en ~/.profile de esta manera:
export BOOST_ROOT=$HOME/work/boost_1_57_0
Tenga en cuenta que ese impulso debe crearse si está utilizando bibliotecas sin encabezado.
Respuesta4
También me encuentro con una situación tan incómoda en Ubuntu...
Mi solución simplemente no es usar find_package
sino agregar las bibliotecas en el proceso de enlace.
target_link_libraries( your_program boost_system boost_filesystem ... )
Lo malo es que cmake
no se puede examinar la existencia de la boost
biblioteca. Sin embargo, simplemente funciona.
Espero que alguien pueda encontrar una solución mejor.