10.3 Tester la présence de la librairie complète

Regardons ce que donne un test complet.

Pour que tout fonctionne il faut écrire ce qui suit dans un fichier FindMALIB.cmake :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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)


find_path(PLIB_MATHC_LIBRARY_DIR
       NAMES libmalib.a
       PATHS "${MALIB_PREFIX}/lib" ${CMAKE_INSTALL_PREFIX}/lib
${CMAKE_INCLUDE_PATH}
)

IF (MALIB_LIBRARY_DIR)
       MESSAGE(STATUS "Found lib MALIB : ${MALIB_LIBRARY_DIR}")
ELSE (MALIB_LIBRARY_DIR)
       MESSAGE(FATAL_ERROR "errrrr lib MALIB not found baahhhh bouuuuuu")
ENDIF (MALIB_LIBRARY_DIR)

set(MALIB ${MALIB_LIBRARY_DIR}/libplib6_mathc.a)

On test si le fichier libmalib.a est dans in des dossiers que l'on propose et on regarde le résultat. Si on a trouvé la lib, on donne sont dossier, si on ne l'a pas trouvé on râle. À la dernière ligne on définit une variable ayant le même nom que la lib en majuscule (convention), comme ça sa simplifie l'écriture des dépendances d'un programme ayant besoin de cette lib :

1
target_link_libraries(monprogramme ${MALIB})

Et maintenant dans un programme vous pouvez, dans le fichier CMakeLists.txt écrire :

1
2
3
4
5
6
7
8
9
project(MonProgramme)
cmake_minimum_required(VERSION 2.6)

set(CMAKE_MODULE_PATH ${MALIB_PREFIX}/CMAKE_MODULES)

find_package(MALIB REQUIRED)

add_executable(monprogramme main.cpp)
target_link_libraries(monprogramme ${MALIB})

Vous avez reconnu MALIB_PREFIX qui est le préfixe d'installation de MALIB, CMAKE_MODULE_PATH qui est un dossier ou CMake va chercher les fichier .cmake, et une nouveauté, la commande find_package qui permet d'appeler le fichier .cmake correspondant pour trouver la lib que l'on veut être sûre d'avoir pour compiler le programme monprogramme.

ne vous inquiétez pas, nous ferrons des exemples.