Depuis le Wiki:
CMAKE_CURRENT_SOURCE_DIR c'est le répertoire où se trouve le CMakeLists.txt actuellement traité
CMAKE_CURRENT_LIST_DIR (depuis 2.8.3) c'est le répertoire du fichier liste en cours de traitement.
À partir des documents:
CMAKE_CURRENT_SOURCE_DIR: chemin vers le répertoire source en cours de traitement. Il s'agit du chemin d'accès complet au répertoire source en cours de traitement par cmake.
CMAKE_CURRENT_LIST_DIR: Répertoire complet du fichier liste en cours de traitement. Au fur et à mesure que CMake traite les fichiers de liste dans votre projet, cette variable sera toujours définie sur le répertoire où se trouve le fichier de liste en cours de traitement (CMAKE_CURRENT_LIST_FILE). La valeur a une portée dynamique. Lorsque CMake commence le traitement des commandes dans un fichier source, il définit cette variable sur le répertoire où se trouve ce fichier. Lorsque CMake a fini de traiter les commandes du fichier, il restaure la valeur précédente. Par conséquent, la valeur de la variable à l'intérieur d'une macro ou d'une fonction est le répertoire du fichier invoquant l'entrée la plus basse de la pile d'appels, et non le répertoire du fichier contenant la définition de macro ou de fonction.
Dans quelles circonstances ces variables auraient-elles des valeurs différentes?
./
?Réponses:
Les variables
CMAKE_CURRENT_SOURCE_DIR
etCMAKE_CURRENT_LIST_DIR
peuvent faire référence à différents répertoires pour un fichier de liste CMake qui est inclus par un autre fichier avec la commande include . Par exemple, si aCMakeLists.txt
est présent dans un répertoireproject
et contient la directive suivantealors pendant que
src/CMakeLists.txt
est en cours de traitementCMAKE_CURRENT_LIST_DIR
se référera àproject/src
tandis queCMAKE_CURRENT_SOURCE_DIR
pointe encore vers le répertoire externeproject
.CMAKE_CURRENT_LIST_DIR
est pratique lorsque vous devez localiser des fichiers de ressources tels que des fichiers modèles ou des scripts de commandes situés à côté duCMakeLists.txt
fichier en cours de traitement.Remarque: lorsque vous utilisez la
add_subdirectory()
commande plutôt queinclude()
, le comportement est différent et lors dusrc/CMakeLists.txt
traitement, les deux variables pointeront versproject/src
.la source
CMAKE_CURRENT_LIST_DIR
change avec chaque fichier que vousinclude()
; il n'a pas besoin d'être appeléCMakeLists.txt
.CMAKE_CURRENT_LIST_DIR
etinclude(...)
dans vos projets.CMAKE_CURRENT_SOURCE_DIR
ressemble plus à ceCMAKE_SOURCE_DIR
que la documentation l'implique.add_subdirectory()
? Les deux variables pointeront-elles vers le dossier?