CMake no puede encontrar Boost en Windows

Tengo un archivo CMake muy simple que funciona bien en linux, pero en las ventanas, dice que no puede encontrar impulso (aunque parece encontrarlo, como dice "ver versión adecuada encontrada"). Aquí está el archivo de construcción inicial:

cmake_minimum_required(VERSION 3.16.3)
project(filecompare)

set(CMAKE_CXX_STANDARD 20)

find_package(Boost 1.73.0 COMPONENTS program_options)

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    add_executable(filecompare filecompare.cpp)
    target_link_libraries(filecompare ${Boost_LIBRARIES})
endif()

Salida CMake:

-- Could NOT find Boost (missing: Boost_INCLUDE_DIR program_options) (Required is at least version "1.73.0")
-- Configuring done
-- Generating done
-- Build files have been written to: C:/repos/filecompare/cmake-build-debug

Así que parece que no puede encontrar la biblioteca por su cuenta, así que añadí estas líneas por encima de find_package:

SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/local/boost_1_73_0")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/local/boost_1_73_0/lib64-msvc-14.2")

Ahora de alguna manera parece encontrar la biblioteca, pero no, aquí está la salida:

-- Could NOT find Boost (missing: program_options) (found suitable version "1.73.0", minimum required is "1.73.0")
-- Configuring done
-- Generating done
-- Build files have been written to: C:/repos/filecompare/cmake-build-debug

Traté de poner cosas como:

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
SET(BOOST_ROOT "C:/local/boost_1_73_0/boost")

pero eso tampoco ayuda. ¿Qué estoy haciendo mal aquí? Estoy usando el club clang en CLion con VisualStudio 2019

Pregunta hecha hace 3 años, 4 meses, 27 días - Por stackscripter


3 Respuestas:

  • Para mi mente tienes dos problemas diferentes:

    1. CMake no sabe dónde encontrar boost.
    2. No has construido el boost binarios de biblioteca para clang.

    El primer problema es fácil de resolver y casi lo tenías bien. Para CMake encontrar boost necesita establecer: BOOST_ROOT y BOOST_LIBRARYDIR, CMake generará CMAKE_INCLUDE_PATH y CMAKE_LIBRARY_PATH de estas variables. Normalmente los pongo como variables ambientales; en su caso deben ser:

    BOOST_ROOT C:/local/boost_1_73_0
    BOOST_LIBRARYDIR C:/local/boost_1_73_0/lib64-msvc-14.2
    

    suponiendo que lib64-msvc-14.2 es donde construiste el boost bibliotecas con clang?
    Nota: los binarios de la biblioteca (incluyendo dlls si se construyen como compartidos) deben estar en un subdirectorio de lib64-msvc-14.2 llamado lib.

    El segundo problema es que usted necesita construir el boost bibliotecas, específicamente las program_options biblioteca, para clang.

    Sólo he intentado construir boost con clang una vez, y entonces sólo podía construir 32 bits de binarios, ver Edificio Boost con Clang “Failed to build Boost.build engine”. Sin embargo, eso fue hace 18 meses y las cosas pueden haber mejorado desde entonces.

    Sé consciente de que a menudo uso boost bibliotecas construidas con mingw ()gcc) en Windows y tener problemas con CMake no encontrar boost ver: cmake FindBoost not finding Boost bibliotecas cuando se construye con MinGW en Windows No me sorprendería si tuvieras problemas similares con clang. Muchos C++ bibliotecas e instrumentos (incluidos CMake) asumir que si estás en Windows entonces estás usando Visual Studio...

    Te recomiendo construir con Visual Studio primero, ya que ya tienes el Visual Studio 19 boost binarios de biblioteca. También recomiendo establecer CMAKE_CXX_STANDARD a 17, porque estás empujando todo hasta el límite en el momento! :)

    Respondida el Dec 18, 2020 a las 13:16 - por nodenomad

    Votos positivos: 0 | Votos negativos: 0

  • Parece que estás teniendo problemas para encontrar la biblioteca Boost en Windows utilizando CMake. Aquí hay algunas sugerencias para solucionar este problema:

    • Asegúrate de que la versión de Boost que estás intentando usar coincida con la que has especificado en `find_package`. En este caso, estás buscando la versión 1.73.0 y parece que la encontró, pero aún así muestra el error. Puede intentar reducir el requisito a `1.73` en lugar de `1.73.0`, ya que a veces CMake puede ser sensible a la precisión del número de versión.
    • Intenta especificar la ruta completa del archivo `boost_program_options` en `find_package`. Esto a menudo ayuda a que CMake encuentre la biblioteca correctamente. Por ejemplo:
    cmake
    find_package(Boost 1.73 REQUIRED COMPONENTS program_options PATHS "C:/local/boost_1_73_0/lib64-msvc-14.2")
    
    • Asegúrate de que las variables de entorno necesarias estén configuradas correctamente. Es posible que necesites incluir la ruta de Boost en la variable de entorno `BOOST_ROOT` en tu sistema.
    • Si estás utilizando Visual Studio 2019 con CLion, asegúrate de que estás en el entorno adecuado para compilar tu proyecto. Asegúrate de que estás utilizando las herramientas de compilación de Visual Studio y que está apuntando a la arquitectura y la versión de Boost correctas (por ejemplo, `lib64-msvc-14.2`).

    Prueba estas sugerencias y vuelve a ejecutar CMake para ver si resuelve el problema de encontrar Boost en Windows. ¡Espero que te sean útiles!

    Respondida el Dec 19, 2020 a las 13:15 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Hay algunas cosas que puedes intentar para solucionar este problema:

    • Verifica la versión de Boost: Asegúrate de que tienes instalada la versión correcta de Boost (1.73.0) y que estás usando la ruta de inclusión y biblioteca correctas.
    • Usa la opción `find_library`: Intenta usar `find_library` para encontrar la biblioteca Boost específica que necesitas:
    cmake
    find_library(Boost_LIBRARY NAMES boost_program_options)
    
    • Establece la variable `Boost_LIBRARY_DIRS`: Si `find_library` no encuentra la biblioteca, puedes intentar establecer manualmente la variable `Boost_LIBRARY_DIRS` con la ruta a la biblioteca:
    cmake
    set(Boost_LIBRARY_DIRS "C:/local/boost_1_73_0/lib64-msvc-14.2")
    
    • Usa el módulo `BoostConfig.cmake`: Boost proporciona un módulo `BoostConfig.cmake` que puede ayudar a encontrar y configurar Boost. Intenta agregarlo a tu proyecto CMake:
    cmake
    include(BoostConfig.cmake)
    
    find_package(Boost 1.73.0 REQUIRED COMPONENTS program_options)
    
    • Verifica tu entorno de compilación: Asegúrate de que tu entorno de compilación esté configurado correctamente. Puedes intentar ejecutar el siguiente comando para verificar:
    
    cmake -DCMAKE_VERBOSE_MAKEFILE=ON ..
    

    Esto imprimirá el Makefile generado por CMake, que puede ayudarte a identificar cualquier problema con las rutas de inclusión o biblioteca.

    • Intenta usar una versión anterior de Boost: Si todo lo demás falla, puedes intentar usar una versión anterior de Boost, como 1.72.0 o 1.71.0.

    Si aún tienes problemas, proporciona el archivo CMake completo y cualquier mensaje de error adicional que estés viendo.

    Respondida el Dec 19, 2020 a las 13:22 - por Gemini

    Votos positivos: 0 | Votos negativos: 0