Buscar..


Enfoque general para depurar al construir con Make

Supongamos que la make falla:

$ make

make VERBOSE=1 en su lugar con make VERBOSE=1 para ver los comandos ejecutados. Luego ejecute directamente el comando del enlazador o compilador que verá. Intenta hacer que funcione agregando las banderas o bibliotecas necesarias.

Luego determine qué cambiar, para que CMake pueda pasar los argumentos correctos al comando del compilador / vinculador:

  • qué cambiar en el sistema (qué bibliotecas instalar, qué versiones, versiones de CMake)
  • si el anterior falla, qué variables de entorno establecer o parámetros para pasar a CMake
  • de lo contrario, qué cambiar en el CMakeLists.txt del proyecto o las secuencias de comandos de detección de la biblioteca como FindSomeLib.cmake

Para ayudar en eso, agregue llamadas de message(${MY_VARIABLE}) a CMakeLists.txt o *.cmake para depurar las variables que desea inspeccionar.

Deje que CMake cree makefiles verbosos

Una vez que un proyecto CMake se inicializa a través de project() , la verbosidad de salida del script de compilación resultante se puede ajustar a través de:

CMAKE_VERBOSE_MAKEFILE

Esta variable se puede configurar a través de la línea de comando de CMake al configurar un proyecto:

cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>

Para GNU, esta variable tiene el mismo efecto que ejecutar make VERBOSE=1 .

Depurar errores find_package ()

Nota: Los mensajes de error de CMake mostrados ya incluyen la solución para las rutas de instalación de herramientas / bibliotecas "no estándar". Los siguientes ejemplos solo find_package() resultados más detallados de CMake find_package() .

CMake Paquete / Módulo con soporte interno

Si el siguiente código (reemplace el módulo FindBoost con su módulo en cuestión )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Boost REQUIRED)

da un error como

CMake Error at [...]/Modules/FindBoost.cmake:1753 (message):
  Unable to find the requested Boost libraries.

  Unable to find the Boost header files.  Please set BOOST_ROOT to the root
  directory containing Boost or BOOST_INCLUDEDIR to the directory containing
  Boost's headers.

Y se está preguntando dónde intentó encontrar la biblioteca, puede verificar si su paquete tiene una opción _DEBUG como la del módulo Boost para obtener resultados más detallados.

$ cmake -D Boost_DEBUG=ON .. 

CMake habilitado paquete / biblioteca

Si el siguiente código (reemplaza el Xyz con tu biblioteca en cuestión )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Xyz REQUIRED)

da un error como

CMake Error at CMakeLists.txt:4 (find_package):
  By not providing "FindXyz.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Xyz", but
  CMake did not find one.

  Could not find a package configuration file provided by "Xyz" with any of
  the following names:

    XyzConfig.cmake
    xyz-config.cmake

  Add the installation prefix of "Xyz" to CMAKE_PREFIX_PATH or set "Xyz_DIR"
  to a directory containing one of the above files.  If "Xyz" provides a
  separate development package or SDK, be sure it has been installed.

Y se pregunta dónde intentó encontrar la biblioteca, puede usar la variable global CMAKE_FIND_DEBUG_MODE no CMAKE_FIND_DEBUG_MODE para obtener un resultado más detallado.

$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow