Estoy tratando de configurar un proyecto utilizando CMake, pero no puede encontrar las bibliotecas de Boost aunque estén en la carpeta especificada. He especificado Boost_INCLUDE_DIR, Boost_LIBRARYDIR y BOOST_ROOT, pero sigo recibiendo un error que dice que CMake no puede encontrar Boost. ¿Cuál podría ser la razón de tal error?Cmake no encuentra Boost
Respuesta
¿Estás seguro de que lo estás haciendo de la manera correcta? La idea es que CMake establezca BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR y BOOST_ROOT automáticamente. Hacer algo como esto en CMakeLists.txt:
FIND_PACKAGE(Boost)
IF (Boost_FOUND)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
ADD_DEFINITIONS("-DHAS_BOOST")
ENDIF()
si el refuerzo no está instalado en una ubicación predeterminada y puede por lo tanto no puede encontrar cmake, se puede decir cmake dónde buscar impulso de esta manera:
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib")
por supuesto esas dos líneas tienen que ser antes de la FIND_PACKAGE (Boost) en CMakeLists.txt
Hay más ayuda disponible leyendo el archivo FindBoost.cmake sí. Está ubicado en su directorio 'Módulos'.
Un buen comienzo es establecer (Boost_DEBUG 1) - esto generará una gran cantidad de información sobre dónde se ve el impulso, qué es lo que está buscando y puede ayudar a explicar por qué no puede encontrarlo.
También puede ayudarlo a determinar si retoma correctamente su BOOST_ROOT.
FindBoost.cmake también a veces tiene problemas si la versión exacta de boost no figura en las variables Versiones disponibles. Puede encontrar más información al leer FindBoost.cmake
Por último, FindBoost.cmake ha tenido algunos errores en el pasado. Una cosa que puede intentar es sacar una versión más reciente de FindBoost.cmake de la última versión de cmake, y pegarla en su carpeta de proyecto junto con CMakeLists.txt; incluso si tiene una versión anterior de boost, usará el nueva versión de FindBoost.cmake que está en la carpeta de su proyecto.
Buena suerte.
Un consejo más para cualquiera que intente construir CGAL en particular, con Boost estáticamente vinculado. No es suficiente definir Boost_USE_STATIC_LIBS
; queda anulado en el momento en que Boost_DEBUG
muestra su valor. Lo que hay que hacer aquí es marcar la casilla "Avanzado" y habilitar CGAL_Boost_USE_STATIC_LIBS
.
Si usted está construyendo su propio impulso no se olvide de utilizar el --layout = versionado de lo contrario la búsqueda de una versión particular de la biblioteca fallará
También tuve un problema similar y descubrí que el BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR y las variables env BOOST_ROOT deben contener rutas absolutas. HTH!
Para la versión 3.1.0-RC2 cmake para recoger impulso 1,57 especifique -D_boost_TEST_VERSIONS = 1,57
versión cmake por defecto 3.1.0-RC2 para impulsar < = 1.56.0 como se ve usando -DBoost_DEBUG = ON
cmake -D_boost_TEST_VERSIONS = 1.57 -DBoost_DEBUG = ON -DCMAKE_BUILD_TYPE = Debug -DCMAKE_C_COMPILER = clang -DCMAKE_CXX_COMPILER = clang ++
Luché con este problema por mi cuenta. Resultó que cmake
estaba buscando archivos de la biblioteca Boost usando la convención de nomenclatura de Boost, en la que el nombre de la biblioteca es una función de la versión del compilador utilizada para compilarlo. Nuestras bibliotecas de Boost fueron construidas usando GCC 4.9.1
, y esa versión del compilador estaba de hecho presente en nuestro sistema; sin embargo, también se instaló GCC 4.4.7
. Da la casualidad que la secuencia de comandos de cmake FindBoost.cmake
detectó automáticamente la instalación GCC 4.4.7
en lugar del GCC 4.9.1
, y por lo tanto estaba buscando archivos de la biblioteca Boost con "gcc44
" en los nombres de archivo, en lugar de "gcc49
".
La solución simple era forzar a cmake a suponer que GCC 4.9 estaba presente, configurando Boost_COMPILER
en "-gcc49
" en CMakeLists.txt
. Con este cambio, FindBoost.cmake
buscó y encontró mis archivos de biblioteca de Boost.
También puede especificar la versión del impulso que le gustaría CMake para utilizar al pasar -DBOOST_INCLUDEDIR o -DBOOST_ROOT que apunta a la ubicación de la versión correcta cabeceras impulsar
Ejemplo:
cmake -DBOOST_ROOT=/opt/latestboost
Esto también será útil cuando hay múltiples versiones de refuerzo en el mismo sistema.
Tuve el mismo problema al intentar ejecutar make
para un proyecto después de instalar la versión 1.66.0 de Boost en Ubuntu Trusty64. El mensaje de error es similar a (no exactamente) éste:
CMake Error at
/usr/local/Cellar/cmake/3.3.2/share/cmake/Modules/FindBoost.cmake:1245 (message):
Unable to find the requested Boost libraries.
Boost version: 0.0.0
Boost include path: /usr/include
Detected version of Boost is too old. Requested version was 1.36 (or newer).
Call Stack (most recent call first):
CMakeLists.txt:10 (FIND_PACKAGE)
Boost fue definitivamente instalado, pero CMake no pudo detectarlo. Después de pasar un montón de tiempo jugando con los caminos y las variables ambientales, que finalmente terminamos el registro de cmake
sí para las opciones y encontré lo siguiente:
--check-system-vars = Find problems with variable usage in system files
por lo que corrí lo siguiente en el directorio en cuestión:
sudo cmake --check-system-vars
que volvió:
Also check system files when warning about unused and uninitialized variables.
-- Boost version: 1.66.0
-- Found the following Boost libraries:
-- system
-- filesystem
-- thread
-- date_time
-- chrono
-- regex
-- serialization
-- program_options
-- Found Git: /usr/bin/git
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/myproject
y resuelva el problema.
- 1. cmake no encuentra Qt4
- 2. cmake no encuentra las bibliotecas de impulso
- 3. CMake and Boost
- 4. CMake linking to boost. error LNK2005
- 5. Encontrar Boost compilado con CLang con CMake
- 6. cmake encuentra mal las libs de python
- 7. donde se encuentra boost property_tree :: empty_ptree?
- 8. Linking boost a la biblioteca compartida con CMake en Linux
- 9. Cómo vincular el programa C++ con Boost usando CMake
- 10. ¿Puede CMake generar scripts de compilación que * no * usan cmake?
- 11. CMAKE no puede encontrar OpenNI
- 12. CMake no puede encontrar Curses
- 13. CMake ... ccmake or cmake?
- 14. Uso de boost.asio en cMake
- 15. cap_ios.h no se encuentra
- 16. dlopen() no se encuentra
- 17. MSTest.exe no encuentra app.config
- 18. target_link_libraries CMAKE no vincular mi biblioteca
- 19. cmake - find_library - ubicación personalizada de la biblioteca
- 20. Boost Asio tcp :: resolver: servicio no encontrado
- 21. ¿No se encuentra MSVCP90.dll?
- 22. ffmpeg no encuentra vcodec libx264
- 23. C# XPath no encuentra nada
- 24. java Arrays.binarySearch no encuentra apuntar
- 25. ¿Por qué ** ** no encuentra nada?
- 26. XmlElement.SelectNodes (..) - no encuentra nada .. ¿Ayuda?
- 27. Encuentra IMEI no en wp7?
- 28. jQuery: ¿no encuentra una función?
- 29. Boost pitón que une
- 30. boost :: multi_array resize no funciona
Es '$ {Boost_INCLUDE_DIR}' no '$ {BOOST_INCLUDE_DIR}', el caso es importante. –
Quizás esto haya cambiado en las versiones más nuevas de cmake, pero aquí están los documentos de referencia: http://www.cmake.org/cmake/help/v3.0/module/FindBoost.html –
no funciona para mí ... encuentra la biblioteca de impulso, pero genera toneladas de errores en el tiempo de compilación –