CMake non trova include / librerie

Voglio utilizzare alcune intestazioni di terze parti (o una libreria) in un progetto che utilizza CMake. Ma non trova le intestazioni (la biblioteca). Perché CMake non lo trova?

Le routine di ricerca di CMake cercano intestazioni e librerie in determinati luoghi. Ciò include la variabile PATH e le posizioni predefinite per il software installato, ad es. Per molti Linuces /usr/bin . Inoltre, valuta la variabile CMake CMAKE_PREFIX_PATH .

Hai due possibilità per aiutare CMake a trovare i file richiesti:

  1. Controlla se il tuo software è installato correttamente. Per il software auto-compilato, di solito è fatto da make install o simile. Se si usano pacchetti (RPM o deb), sono generalmente installati e possono essere trovati con la variabile PATH .

  2. Se non vuoi o puoi installare il software, aggiungi il suo percorso alla variabile CMAKE_PREFIX_PATH . Passare alla chiamata CMake cmake -DCMAKE_PREFIX_PATH=/path/to/software .. oppure modificare / aggiungere il campo corrispondente nella CMake-GUI.

È necessario eliminare CMakeCache.txt , altrimenti CMake non troverà la libreria, perché non controlla ma utilizza il risultato memorizzato nella cache. Rieseguire CMake e dovrebbe funzionare.

Ordine di valutazione

Se sul sistema sono presenti più versioni di una libreria, aggiungere quella che si desidera utilizzare a CMAKE_PREFIX_PATH poiché le variabili vengono valutate prima delle variabili del percorso di sistema.

Variabili specifiche del modulo

Alcuni moduli offrono variabili specifiche come mylib_DIR o mylib_ROOT per indicare il percorso di ricerca. Il suo uso è scoraggiato e sono lasciati solo per compatibilità retrotriggers. I nuovi moduli non hanno questi moduli e commette l’aggiunta di tali variabili vengono respinte dagli sviluppatori di CMake.

Documentazione

Maggiori dettagli su come CMake cerca i file e in quale ordine è ansible trovare nella documentazione: https://cmake.org/cmake/help/v3.6/command/find_library.html