Compléments
FetchContent
La problématique :
- Vous avez sur des dépôts un programme et des bibliothèques dont dépend ce programme.
- Vous voulez simplifier la vie de l'utilisateur : qu'il n'ait pas à télécharger et compiler séparément chaque bibliothèque (et dans le bon ordre s'il y a des dépendances entre elles).
Une solution si les bibliothèques peuvent être compilées avec CMake : le
module FetchContent
.
include(FetchContent)
FetchContent_Declare(<name> GIT_REPOSITORY <url>)
...
FetchContent_MakeAvailable(<name1> [<name2>...])
L'ordre peut être quelconque même s'il y a des dépendances entre les bibliothèques téléchargées.
Les bibliothèques sont téléchargées au moment de la configuration.
Elles sont ajoutées au projet comme avec la commande add_subdirectory
.
La commande option
option(optVar helpString)
définit une variable de cache optVar, de type logique, dont la valeur par défaut est "False". C'est un raccourci pour :
set(optVar False CACHE BOOL helpString)
Manipulation 32
- Modifiez le fichier
CMakeLists.txt
demax_diff_rect
pour offrir l'option de télécharger automatiquement les bibliothèques nécessaires. Adresses : https://github.com/lguez/NR_util, https://github.com/lguez/Jumble - Remarquez que si l'utilisateur choisit le téléchargement alors,
après la configuration, le répertoire
_deps
est créé dans le répertoire de compilation.
MPI
Pour compiler un programme utilisant MPI :
find_package(MPI REQUIRED)
target_link_libraries(<target> ... PRIVATE MPI::MPI_Fortran)
Nota bene : CMake n'utilise pas le wrapper du compilateur pour MPI. Il est possible d'avoir un exécutable compilé sans MPI dans le même projet.
Si vous utilisez le module mpi_f08
(conseillé) dans votre code
source Fortran, vous pouvez vérifier à la configuration que votre
version de MPI est suffisamment récente. Le module FindMPI, qui est
utilisé par find_package(MPI)
, définit la variable logique
MPI_Fortran_HAVE_F08_MODULE
.
Manipulation 33
Écrivez le fichier CMakeLists.txt
pour le programme
hello_MPI_Fortran
. Vérifiez la disponibilité de mpi_f08
.
Problèmes de richesse
Si vous avez plusieurs compilateurs sur votre machine, ou plusieurs versions de bibliothèques, comment orienter CMake vers l'un ou l'autre ?
Si votre environnement est contrôlé par la commande module, chargez les modules que vous souhaitez utiliser, et de préférence seulement ceux-là, avant de lancer CMake. Pour choisir un compilateur, utilisez la variable d'environnement FC. Par exemple :
FC = ifort cmake ..
ou
FC = ifort cmake-gui ..
Vous ne pouvez pas relancer cmake avec un autre compilateur, en gardant le reste de votre configuration. Pour changer de compilateur, vous devez repartir de zéro : tout effacer dans le répertoire de compilation (ou créer un autre répertoire de compilation).
Si CMake ne choisit pas la bonne version d'une bibliothèque, utilisez
la variable CMAKE_PREFIX_PATH
. Vous n'avez pas besoin de repartir
de zéro (c'est-à-dire d'effacer le répertoire de compilation) pour
changer de version d'une bibliothèque. Supprimez la variable pointant
vers cette bibliothèque : bouton dans cmake-gui ou option -U
de cmake.
Si CMake ne choisit pas la bonne version de la bibliothèque MPI,
définir la variable de cache MPIEXEC_EXECUTABLE
(type FILEPATH
)
pointant vers le mpiexec de la bonne bibliothèque.