10.1 Tester la présence des headers

La fonction suivante va nous dire si les fichiers que l'on va lui dire de chercher, existent ou pas :

1
find_path( )

Voici comment il faut faire :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#on va chercher les fichiers malib.h autreFichier.h dans les dossier MALIB_PREFIX/include/MALIB/
CMAKE_INSTALL_PREFIX/include/MALIB/ et CMAKE_INCLUDE_PATH
#
find_path(MALIB_INCLUDE_DIR
	NAMES malib.h autreFichier.h
	PATHS "${MALIB_PREFIX}/include/MALIB/" ${CMAKE_INSTALL_PREFIX}/include/MALIB/
${CMAKE_INCLUDE_PATH}
)

#on test la réponse de la fonction find_path
if (MALIB_INCLUDE_DIR)
#si on les a trouvé on est content
       MESSAGE(STATUS "Found MALIB headers : ${MALIB_INCLUDE_DIR}")
else (MALIB_INCLUDE_DIR)
#si on ne les a pas trouvé on râle
       MESSAGE(FATAL_ERROR "errrrr MALIB headers not found baahhhh bouuuuuu")
endif (MALIB_INCLUDE_DIR)

C'est quoi ces nouvelles variables ?

Convention, c'est toujours pareil, convention.

Faisons le point sur ces variables :

  • CMAKE_INSTALL_PREFIX : définit un préfixe d'installation, donc peut-être le dossier parent du dossier include où sont les fichiers headers dont il faut tester la présence
  • CMAKE_INCLUDE_PATH : une liste de dossier include, il peut y avoir le bon dans le lot
  • MALIB_PREFIX : le préfixe d'installation de la lib que l'on cherche (cette variable peut avoir le nom que vous voulez, mais je vous dirai quand même Convention!!!)
  • MALIB_INCLUDE_DIR : variable que l'on peut appeler comme on veut (mais au moins avec un nom comme ça on sait que quoi on parle, Convention!!!). Elle contient les nom du dossier include de la lib (celui des 3 qui a fonctionné) si la fonction find_path a effectivement trouvée quelque chose, ou 0 si elle n'a rien trouvé ce qui veut dire que les headers ne sont pas installés, en tout cas pas à l'endroit où on lui a dit de chercher

Ensuite la condition est assez facile à comprendre, si on a trouvé, on affiche le dossier MALIB_INCLUDE_DIR, sinon on dit que l'on à pas trouvé et on dit a CMake qu'il y a une erreur (FATAL_ERROR).