Bonjour.

J'ai un gros problème de compréhension avec CMake (j'ai bien regardé les tutos avant) et notamment en ce qui concerne la définition des variables.

Pour trouver les bibliothèques quand il y a des modules associés c'est assez pratique. Mais pour une bibliothèque qui n'a pas été prévue, j'ai beaucoup plus de mal.

Prenons un exemple : un programme, à la compilation, va nécessiter GMP. L'utilisateur a installé GMP dans un répertoire de son choix, avec un sous répertoire include et un sous répertoire lib. Par exemple :

/perso/gmp/include/gmp.h
/perso/gmp/include/gmpxx.h
/perso/gmp/lib/libgmp.a
/perso/gmp/lib/libgmpxx.a


J'ai tout un tas de questions :

1) Comment faire pour que CMake essaye de les trouver automatiquement ?

2) Comment faire que cela soit réglable au travers du gui cmake pour que l'utilisateur indique où se trouvent les bibliothèques ?

3) Quand on fait à la fin, TARGET_LINK_LIBRARIES(exemple gmp) comment on sait quel nom de librairie on doit mettre. Là en l'occurence j'ai mis gmp, mais pourquoi pas GMP, pourquoi pas Gmp ou encore libgmp ? Comment je devine ce nom ? Cela correspond il au nom du fichier de bibliothèque (par exemple libgmp.a) auquel j'ai retiré le préfixe "lib" et l'extension ".a" ? Si je veux linker un fichier qui s'appelle libessai393lol.a, je mettrais TARGET_LINK_LIBRARIES(exemple essai393lol) ?

4) J'ai posé le même genre de question sur stak overflow. Quelqu'un m'a répondu :
CMake is not so hard to understand.

First Step

Use find_package to locate the libary.

find_package(GMP REQUIRED)

Second step

Use include_directories to include the libary header files.

include_directories(${GOBJECT_INCLUDE_DIR})

Third Step

Use target_link_libraries to link your binary against the libary.

add_executable(ExecutableName Main.cpp)
target_link_libraries(ExecutableName ${GOBJECT_LIBRARIES})
Là en l'occurence, je ne comprends pas grand chose (voir questions suivantes) :

5) find_package(GMP REQUIRED) : find_package n'est-il pas réservé à des "routines" pré écrites ? Là encore pourquoi GMP ? Est-ce parce que le fichier s'appelle libgmp.a, je retire lib et .a et je met ce qui reste en majuscules ? Par exemple pour libessai393lol.a, j'aurai mis find_package(ESSAI393LOL REQUIRED) ?

6) Alors ensuite le ${GOBJECT_INCLUDE_DIR} et ${GOBJECT_LIBRARIES}, pour moi, ils sortent de l'espace... Est-ce des noms de variables complètement arbitraires qui seront indiqués par l'utilisateur lorsqu'il lancera Cmake ? Ou sinon comment je les trouve ces noms ? Est-ce que un nom de variable avec le suffixe _INCLUDE_DIR ou _LIBRARIES est interprété par CMake, ou j'aurai pu mettre genre ${GOBJECT_INC_DIR} et ${GOBJECT_LIB} ? Le GOBJECT il vient d'où ?

7) Bon, là en l'occurence la question portait juste sur libgmp et libgmpxx. Admettons maintenant que j'ai un répertoire contenant une vingtaine de librairies. Comment faire pour les inclure/linker toutes ? Il faut que je les traite une par une ?

Ces questions sont très naïves, mais pour l'instant, j'avance dans le brouillard : je me contente de recopier des trucs sans savoir ce qui sera interprété, ce qui sera proposé à l'utilisateur etc...

Merci beaucoup à celui/ceux qui prendront le temps de m'éclairer

EDIT : mon but est de comprendre comment linker simplement une bibliothèque pour laquelle il n'existe pas de module automatique ...