cmake 3.0.2 não consegue encontrar impulso em 14.04

cmake 3.0.2 não consegue encontrar impulso em 14.04

Eu tenho o cmake 3.0.2 mais recente compilado a partir de fontes, também libboost-all-dev instalado. E find_package(Boost) não consegue encontrá-lo. Aqui está a saída do 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.

Preciso definir manualmente alguma variável após instalar o Boost para torná-lo visível para o cmake?

Obrigado.

Responder1

Qual versão libboost-all-devvocê está usando? Presumo que você esteja usando a v1.53.0.

Tente instalar libboost1.54-all-dev.

Responder2

Em 14.04 (e provavelmente antes) a 16.04, eu poderia usar estes:

find_package( Boost COMPONENTS filesystem system REQUIRED )

include_directories(
    ${BOOST_INCLUDE_DIRS}
)

target_link_libraries(${PROJECT_NAME}
    ${Boost_FILESYSTEM_LIBRARY}
    ${Boost_SYSTEM_LIBRARY}
}

Se você precisar apenas dos cabeçalhos, não será necessário especificar nenhum componente e nem target_link_libraries():

find_package( Boost REQUIRED )

include_directories(
    ${BOOST_INCLUDE_DIRS}
)

Com o 16.10, tive que instalar libboost-all-devpara que meu código continuasse a ser compilado no Ubuntu.

sudo apt-get install libboost-all-dev

As versões anteriores funcionavam apenas com libboost-dev, de alguma forma. Embora pareça que você já entendeu essa parte, eu só queria ter certeza de que foi claramente mencionado que houve uma mudança recente nesse aspecto.

Responder3

Obrigado, Rohith.

Como solução alternativa, baixei e criei a versão mais recente do boost e adicionei a variável BOOST_ROOT em ~/.profile assim:

export BOOST_ROOT=$HOME/work/boost_1_57_0

Observe que esse impulso deve ser criado se você estiver usando bibliotecas sem cabeçalho.

Responder4

Eu também encontro uma situação tão estranha no Ubuntu ...

Minha solução simplesmente não é usar, find_packagemas adicionar as bibliotecas no processo de link

target_link_libraries( your_program boost_system boost_filesystem ... )

O ruim é que cmakenão se pode examinar a existência da boostbiblioteca. No entanto, simplesmente funciona.

Espero que alguém possa descobrir uma solução melhor.

informação relacionada