cmake 3.0.2 no puede encontrar impulso en 14.04

cmake 3.0.2 no puede encontrar impulso en 14.04

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-devestás usando? Supongo que estás usando la versión 1.53.0.

Intente instalar libboost1.54-all-deven 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-devpara 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_packagesino agregar las bibliotecas en el proceso de enlace.

target_link_libraries( your_program boost_system boost_filesystem ... )

Lo malo es que cmakeno se puede examinar la existencia de la boostbiblioteca. Sin embargo, simplemente funciona.

Espero que alguien pueda encontrar una solución mejor.

información relacionada