CMake no encuentra inclusiones / bibliotecas

Quiero utilizar algunos encabezados de terceros (o una biblioteca) en un proyecto que utiliza CMake. Pero no encuentra los encabezados (la biblioteca). ¿Por qué CMake no lo encuentra?

Las rutinas de búsqueda de CMake buscan encabezados y bibliotecas en algunos lugares específicos. Esto incluye la variable PATH y las ubicaciones predeterminadas para el software instalado, por ejemplo, para muchos Linuces /usr/bin . Además, evalúa la variable CMake CMAKE_PREFIX_PATH .

Tienes dos posibilidades para ayudar a CMake a encontrar los archivos necesarios:

  1. Compruebe si su software está instalado correctamente. Para el software autocomstackdo, esto generalmente se hace mediante make install o similar. Si usa paquetes (RPM o deb), en general están instalados y se pueden encontrar con la variable PATH .

  2. Si no desea o no puede instalar el software, agregue su ruta a la variable CMAKE_PREFIX_PATH . O bien, cmake -DCMAKE_PREFIX_PATH=/path/to/software .. a la llamada de CMake cmake -DCMAKE_PREFIX_PATH=/path/to/software .. o edita / agrega el campo correspondiente en CMake-GUI.

CMakeCache.txt eliminar CMakeCache.txt ; de lo contrario, CMake no encontrará la biblioteca, ya que no verifica, sino que utiliza el resultado en caché. Vuelva a ejecutar CMake y debería funcionar.

Orden de evaluación

Si tiene múltiples versiones de una biblioteca en su sistema, agregue la que quiera usar a CMAKE_PREFIX_PATH ya que las variables se evalúan antes de las variables de la ruta del sistema.

Variables específicas del módulo

Algunos módulos ofrecen variables específicas como mylib_DIR o mylib_ROOT para indicar la ruta de búsqueda. Se desaconseja su uso y solo se dejan por compatibilidad con versiones anteriores. Los nuevos módulos no tienen estos módulos y los commits que agregan tales variables son rechazados por los desarrolladores de CMake.

Documentación

Más detalles sobre cómo CMake busca archivos y en qué orden se puede encontrar en la documentación: https://cmake.org/cmake/help/v3.6/command/find_library.html