cmake
Prueba y depuración
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 comoFindSomeLib.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 ..